说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi中使用自定义光标

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi中使用自定义光标

开发者都希望自己的程序有一个友好的界面,此时,一个生动活泼、有表现力的光标就必不可少了。Windows 缺省提供22种标准光标供在程序中调用,但对一个求新求变的程序员来说,标准光标就不能满足要求了,需要使用自己的光标,那么,在程序中怎样使用自己的光标呢?

●光标资源的获得

要使用自定义光标,必须先得到这些光标。光标文件有两种:静态光标(.cur)和动态光标(.ani)。你可以使用现成的光标文件,比如Delphi 自带的一组光标文件(在C:Program FilesBorlandDelphi 3ImagesCursors目录中),如果你安装了Windows98的桌面主题,则可在Windowsplus! 目录下找到许多光标文件。你也可以自己创建光标文件,比如使用Delphi自带的Image Editor 就可创建静态光标文件

(.cur),但Image Editor不能创建彩色光标,要创建彩色光标,必须使用其它工具,如Vc++ 的资源编辑器。动态光标则必须使用专门的工具软件制作,使用动态光标可达到光标的动画效果,动态光标文件的文件结构与AVI文件结构相似,由文字描述区、信息区、时间控制区、数据区四部分构成。Windows通过按文件时间控制区中指定的时间一帧帧播放文件数据区中包含的光标或图标图像来实现动画效果。

其实,分析文件结构可以发现,静态光标文件(.cur)与图标文件(.ico)结构非常类似,两种文件的主要差别仅在于文件头的文件识别码和是否存在跟踪点(Hot Spot)。文件识别码放在文件的头三个字节,图标文件为00 00 01,光标文件为00 00 02;图标文件没有跟踪点,光标文件的跟踪点信息放在文件的00 0A-00 0D 四个字节中,00 0A - 00 0B记录跟踪点的X 坐标,00 0C-00 0D 记录Y 坐标,记录顺序都是高位

在前,低位在后,图标文件的00 0A-00 0D 为保留位。知道了两者的差异,你就可以通过手工或编一个小程序来实现图标文件到光标文件的转换。相对于光标文件来说,图标文件要好找得多,颜色上也更丰富。

除了光标文件外,你也可以创建资源文件(.res )

在资源文件中包含光标资源

Delphi 同样可在程序中调用。可使用Image Editor 或Microsoft的资源编辑器创建资源文件(推荐使用Vc++的资源编辑器)。Delphi 缺省为每一个项目创建一个与项目名同名的资源文件,如你的项目名为test.dpr ,则资源文件名为test.res。但你如果把光标放在这个文件中,在程序中是无法调用的,必须创建自己的资源文件。在给光标资源命名时注意不要与已有的资源重名,创建好后,再在程序中使用编译指令$R将资源文件加在程序中,如资源文件为my.res

则在主窗体的Implementation下加上一行{$R my.res} 就可以了。

●自定义光标在程序中的使用

Delphi 使用自定义光标是通过调用Windows的API函数实现的。Delphi的Screen对象定义有一个Cursors 属性,属性声明为Property Cursors[Index:Interger]:Hcursor;Cursors属性实际记录了应用程序中使用的全部光标资源的句柄,Index 为每项资源的索引号。Delphi缺省提供的22种光标资源也在其中,Index值为-21~0。要使用自己的光标,首先可调用API函数 Loadcursorfromfile(对于光标文件)或使用Loadcursor(对于资源文件)获得相应光标的句柄,这两个函数都定义在Windows单元中,函数声明为:

Function LoadCursorFromFile(lpFileName:PAnsiChar):HCURSOR;stdcall;

//lpFilename为光标文件名。(两种光标都适用,只需具体指定光标文件名就可以

了。)

Function LoadCursor(hInstance: HINST; lpCursorName: PAnsiChar): HCURSOR;

stdcall;

//hInstance为应用程序的句柄,lpCursorName为光标资源的名字。在资源文件中只能包含静态光标资源,资源文件不支持动态光标这种格式的资源。两个函数的详细说明可参考Delphi的Win32帮助。

得到光标的句柄后,将这个句柄值添加到Cursors数组中,注意Index不要与已有的索引号重复,否则将覆盖已有的光标。要使用这个光标时,只要将该光标的Index赋值给元件的Cursor属性就可以了,Delphi根据这个索引号查找Cursors数组,找到该光标的句柄,并用Setcursor函数将这个句柄赋给元件。需要指出的是,程序结束时,不必调用Deletecursor函数释放光标资源,Delphi会自动释放它们。

●程序示例

unit Unit1;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs;

type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

{$R my.res}//加载资源文件my.res

procedure TForm1.FormCreate(Sender: TObject);

const

crmy1=1;

crmy2=2;

crmy3=3;

var

result1

result2

result3:integer;

begin

result1:=loadcursorfromfile(′my.cur′);

if result1<>0 then //如果返回值为0,则调用失败!

screen.cursors[crmy1]:=result1

else

showmessage(′加载静态光标文件出错!′);

result2:=loadcursorfromfile(′my.ani′);

if result2<>0 then

screen.cursors[crmy2]:=result2

else

showmessage(′加载动态光标文件错误!′);

result3:=loadcursor(Hinstance

′mycursor′);

Hinstance为定义在System单元中的一个长整变量,其值为应用程序的句柄,由Delphi自己维护。

在加载资源文件的光标资源时,如果光标的名字为整数(Vc++的资源编辑器给资源的缺省名就为整数),就必须使用API函数Makeintresource将整数转换为PansiChar类型,再传递给Loadcursor函数。

例如:result:=Loadcursor(Hinstance

Makeintresource(101))}

if result3<>0 then

screen.cursors[crmy3]:=result3

else

showmessage(′加载资源文件中的光标资源出错!′);

//使用加载的光标,cursors[]数组为全局变量,可在程序的任何地方调用;

if result1<>0 then

screen.cursor:=crmy1;

if result2<>0 then

form1.cursor:=crmy2;

if result3<>0 then

screen.cursor:=crmy3;

end;

end.

程序在Windows95

Delphi3.0中调试通过。

雅虎5000万美元收购视频分享应用Qwiki 创业第一年易犯的8大错误 苹果推iOS游戏手柄,掌上游戏主机格局变天? 代码审查固然伟大,那还有其他替代品吗? 怎样维护一个成功的开源项目 麻省理工专家发布新系统Ascend,专注内存访问安全缺陷 Oracle Database 12c面临的最大挑战是开源+开放的生态系统?! 浸入式数据中心:高密度计算的新前沿 2013年腾讯合作伙伴大会要点回顾 “鼠标之父”和超文本研究先驱Douglas Engelbart去世 享年88岁 Web服务器排行:Nginx超越Apache 成为全球TOP 1000网站最常用的Web Server Windows 8之父Steven Sinofsky正式离职微软 不得接受竞争者聘用 Yelp处理1.02亿/月绝对造访人次及3900万评论的省钱秘诀 可视化:图像的主题色提取算法,是不是太高端了? 不利于写出好代码的15个职场因素 GPU Saturday技术沙龙:分享异构计算新技术及应用 微软隐藏最深的秘密武器之一——Visual Studio可作为Python IDE 历时六月,Qt 5.1正式版终于面世! HTML5全硬件加速游戏引擎:Sphinx正式公测 专访“Monster Blade”创始人:无需营销,百万下载背后的秘密 Twitter实时分析平台主要合作伙伴Dataminr:让用户不再错过重要的推文 OpenStack、OpenNebula、Eucalyptus、CloudStack社区活跃度比较 XOR的黄色大象:Erasure Code为Hadoop节省数据恢复带宽 竞争将越来越激烈:戴尔或也进军可穿戴计算市场 新技术:可直接在人脑播放广告 编程调试和诊断的五大规则 70%开发者:对现有应用推广和广告并不满意 四种方案:将OpenStack私有云部署到Hadoop MapReduce环境中 扩展PHP的五个简单技巧,让单服务器并行支撑30000用户 硅谷为什么无法复制 PubNub+Cloudinary:简单几步快速搭建实时图片分享应用 请教:关于treeview 读取SQL Server的numeric字段用什么函数? rzhou(海盗) 收分来 急救:“段落或字节不能超过64K”???在线等待 初级问题! rzhou(海盗) 收分来 大家好!!用java开发数据库!!请帮忙!! 排序问题! 1。对vcl库底层机制一些不明白的地方 可以写代码导入数据吗? 连接ORACLE数据库时候的错误提示 关于动态查询表为空时,怎样获取一个条件??最终调取一个提示框 菜鸟提问,向高手请教一个VB中SQL中的问题, 怎样显示局域网内的所有计算机 请问谁有用VMware设置好的solaris文件啊?或是那里可以下载啊??谢谢了~~ 帮帮小弟呀!!散分 在本地机遇到数据无法提交或读取的事,动网论坛的数据也无法读取,什么原因啊 寻程序员,短期,欢迎加盟!!!!!-------熟悉j2me的!!!!面试合格,待遇为150/天 关于Form的构造函数和OnLoad方法...... 请教Web Services的分布式创建和引用的问题?急!!!!! 在c#的WinForm中如何显示cdr文件,CorelDraw图片哪怕是8.0也行 在建立vc 工程的时候选择了生成hlp 文件。我把我的工程放到别的机器上的时候有如下的错误 怎么样得到游标中的数据的多少记录。 求解1000的阶乘 请问大虾有关BootCode方面的一点问题??非常急! 高分请教:如何在安装程序时注册OCX控件? 请问:在TDbgrid控件的TitleClick事件里如何取得鼠标击键的坐标位置? netwell服务器有不断的响声,急急急................. ★★请教新闻发布系统的图文混排问题 在建立vc 工程的时候选择了生成hlp 文件。我把我的工程放到别的机器上的时候有如下的错误 这句SQL应该如何写? 怎样在VC里面开发手机上程序?需要装什么软件? 请教:这个onLoad事件怎么不起反应 关于web services,大哥麻烦帮助小妹吧! 我现在神思恍惚,无心工作,天天上网灌水打发时间,大家估计我多久会失业? 使能工具栏的某项 网络下载编程求助(紧急求助) 如何判断一个字符串中是否含有某一字符? 如何在网络断开的情况下判断,等网络恢复后再自动连接??? 如何在comboBox中添加icon--在线= 救人啦!!请教BootCode方面的问题,十万火急!! 一个关于 WISE installation 制作安装程序的问题 *.lwp的文件怎么打开亚?请大家帮帮忙!!! DataGrid为何不显示? CRegKey::QueryValue()读取数值数据时遇到的问题…… chmod命令后造成启动错误 请教大家一个关于webservice transaction的实例 菜鸟急救,注册表文件导入的问题? 填空题(急) 钱本草呢? 关于手机的问题 《草原》的第2段主要写了什么? (另加40分!周三前给我甲、乙、丙、丁四地的相对方位是?分别处于东/西半球?满意者追加30--40分! 急求!快点儿~今天吃了两个猕猴桃,放了一个多月了.闻着没什么异味,吃着感觉有点儿樟脑球味(本人家里没有樟脑球,也从来没有买过).现在吃了两个多小时了,没什么感觉.请问有没有什么坏 这个初中的英语句子是不是应该把地点后置?原句:the train for guang zhou has already arrived把for guang zhou后置?the train has already arrived for guang zhou比较好? (另加40分!周4前给我中国第一个南极内陆科学考察站、第三个南极科考站昆仑站(80°25′S,77°06′E),于2009年1月27日在南极内陆冰盖的最高点(海拔4087米)冰穹A地区胜利建成.它是人类在南极 我不想写作业,怎么能让我快点儿写作业, 草原利用的主要制度有哪些? 哪个概念不符合温带沙漠环境特征?1.年降雨量少 2.日温差大 3.年温差小 城市和郊区相比,哪个昼夜温差大?请分析原因 首字母填空Lianyungang is a m________city.we all love her.The children aren't o_________10,they are free.请附上翻译, 墙角有一堆黄沙 底面A到B的长度为1.88米 且A和B到墙角的距离基本相等 高为0.8米 又知黄沙每立方米约重1.7试估算这堆沙的重量,保留2为小数 方法提示:这堆黄沙可以看成是堆成高为0.8米的圆 用英文介绍蛇 人体电阻一般有多大? 墙角有一堆如图所示的黄沙,底面A到B的长度为1.57米,且A和B到墙角的距离基本相等,高为0.8米 求体积急 请问什么频率的无线电对水的穿透性最好?想做一个无线电遥控水的下机器人.请问什么频率的无线电对水(淡水)的穿透性最好?请详细说明.对于超声波控制与普通的无线电比例遥控器的调解调 在三角形ABC中角A B C所对边分别为abc,BC边上的高AD=BC,求b/c+c/b的取值范围 墙角有一堆如图所示的黄沙,底面A到B的长度为1.57米,且A和B到墙角的距离基本相等,高为0.8米 求它的体积 城市和郊区昼夜形成不同风向会使这里风力变大吗?为什么?建立水库为什么会使当地年、日温差变小? 高压电箱上写着高压危险.如果高压电箱旁边抽烟,会爆炸话其他危险吗? 墙角有一堆圆锥形的黄沙A和B到墙角的距离基本相等长度为2米高为0.9m每立方米黄沙重1.7吨这对黄沙重多少吨 在一只底面半径为10厘米的圆柱形容器中,水深12厘米,要在容器里放入长和宽都是8厘米,高18厘米的一块方石1.如果把方石条横放在水中,水面上升几厘米?【得数保留一位小数】2.如果把方石 电很危险,为什么高压电还用裸线? 墙角堆放了一堆玉米.测得点A到点B之间的弧长为1.57M,且点A和点B到墙角的距离相等,玉米高为0.8M.已知每立方米玉米质量为540KG,求这堆玉米的总质量.(答案保留整数) 圆柱形容器a.b深度相等,底面半径分别为3厘米和4厘米把容起a倒入b容器水深比容器的3/4低12厘米求B高度 高压电有多危险 手机怎么有时反应很慢拜托各位大神 热岛效应会加大城市日温差吗? 元朝的商业大都会主要有哪些? 这是一条蛇读英语怎么说? 晏子使楚讲的是一件什么事?楚王是个什么样的人?晏子是个什么样的人? 元朝大都是世界上无与伦比的商业大都市吗 我电话反应慢怎么办? 装修时水管和电管交叉布置且距离很近我家装修的时候水电管在底下交叉了,且砖已经铺好.这种情况需要改进吗?会不会有露电的危险. 文言文(失职)某公养猫二只,各守粮仓一座,且以捉鼠多少行赏.初时,黑猫见鼠皆杀,频频受奖;白猫则杀大留小,亦有奖赏.日久,黑猫仓中无鼠,故不能捉,于是被主人逐出门户. 白猫闻之,暗 高一政治上学期重点总结 为什么手机现在上网反应慢了?为什么手机现在上网反应慢了? 英语翻译 brita水壶是买个marella还是aluna就可以了 蛇的英语是? 春季为什么昼夜温差大 谁知道高一人教版政治上学期重点?告一下 谢了 收音机入水怎么办?我用的是飞利浦aq4288,入水后开机就是在叫.也不是进很多水,我想只是面板湿了,怎样可以搞好,郁闷,现在没人会弄收音机 秋天为什么昼夜温差大? 高一上学期政治怎样学 深海如何通讯?无线电可以通过水吗? 秋天昼夜温差大,在湖南穿什么样的衣服比较合适? 问一个特别中二的问题,假如世界和人都是神创造的东西,那么他杀死人类或是收回自己制造的地球是对的吗虽然我自己都觉得这个问题有点中二,但是我觉得还是有考虑一下的价值的.人和神的 无线电在水里的速度距离 秋天温差大,宝宝感冒发烧了怎么办?怎么办怎么办? 高一政治重点是什么 如图,A,B,C,D,P是圆O上的五个点,且∠APB=∠CPD.AB弧与CD弧的大小有什么关系?为什么? 雨滴的运动雨滴在空气中运动时,所受阻力与其速率的平方成正比,若有两个雨滴从高空中落下,其质量分别为m1 .m2,落至地面钱均做匀速直线运动,则此时雨滴的重力的功率之比为多少?一楼,正 一个球与一个正三棱柱的三个侧面和两个底面都相切,已知这个球的体积为3/32派,则三棱柱的外接球表面积为? 俺反应有时差,咋能反应快点儿? 英语的一些题不会, 蛇用英语怎么说?用音标怎么拼? 五年级上册的期末试题,英语啦,品德啦,科学啦,美术啦,多多益善!大家辛苦了,但注意:是苏教版语文.北师大版数学.PEP英语! 1、It's hard for me___ the work.Would you like ___me a hand?A.to do;to give B.do;give C.to do;giving D.do;to give2、Millie walks back____every day.A.to home B.for home C.home D.at home3、If you work ____enough,your dream will come _____sooner or l 求写雪的句子 快点儿求你们了, 奥巴马被指政治光环不再 支持率与声望美国务卿克里访埃及 美官员称或恢复对日全日空航班突发漏油事故 羽田机场封李克强护航新经济 培育“中国增速”新黄磊女儿黄多多近照曝光 去参加《爸爸东方卫视携手风行网赴沈举办《千金归来社科院等发绿皮书称雾霾会影响生殖能力上海市检察院派驻自贸试验区检察室正式南京启动商品房价格专项检查 不明码标杭州房地产投资销售增幅高位回落南京多数高校学位授予不与英语四六级挂国务院:着力推进钢铁产业结构调整刚果(金)政府宣布该国打击反政府武装朴槿惠拒与安倍进行正式会晤 日方表示美称倡导平等但不干涉沙特是否禁止女性美国西部山区蕴含创业潜力 或成下一个媒体称美商场枪击案凶手为白人男性 已资料显示巴西2012年共发生5.6万美国西部山区蕴含创业潜力 或成下一个美国一商场发生枪击事件 暂无人员伤亡印度民众燃放爆竹庆祝排灯节 引环境污加强农村留守儿童执行时间缩短75%贫困户的“梦工厂”3000万盏灯造梦幻奇境岳阳绿色化工园向低效用地说“不”六中全会二次全体会议讲话节选造福两国人民长沙县“星沙商圈”购物消费节启幕首批入选学员将赴国外培训“健康卫士”城陵矶集装箱年吞吐量全国首家“互联网+戒毒医疗”资江上,那条生命之舟八旬老农的“毛笔人生”其他金砖国家领导人学消防知识东安东莞招商引资苗歌声声“牧马人”越野车武陵源峰林穿行2017,体育大直播“文明星沙,幸福家园”
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘