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

在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中调试通过。

iOS 7将从这三方面影响IT界 超越Google,他企图将整个互联网塞进1台电脑 2013互联网安全大会议题先睹为快之CSA中国理事赵粮 移动建站工具(二):分秒钟DIY一个移动网站 2013上半年中国移动互联网报告,在线完整版 iOS开发者必备:九大设计类工具 已到“迟暮之年”?微软投资者提议两“救世主”外部候选 【SDCC讲师专访】Joseph G. Brown:云带来的软件销售方式变革 用户界面设计攻略:设计师需注意的九大要点 Google Glass的竞争对手来了:看YC演示日的五款新孵化项目! GPU Saturday技术沙龙:OpenCL程序员眼中的下一代APU架构 黑帽大会演讲中国第一人:从攻到防,从白帽黑客到创业者 15个步骤创立技术公司,并收获千万用户(完结) CTO容易犯的三大错误 谷歌艺术计划:互联网能否取代真实的博物馆? Hadoop技术沙龙:Hortonworks技术研发总监展望Hadoop 2.0 Marissa Mayer:雅虎月活跃用户增长了20%达8亿 移动用户3.5亿 气死偷车贼:脑电波防盗技术,让偷车贼无计可施 TIOBE 2013年9月编程语言排行榜:Transact-SQL首次进入前十 前Oracle总裁Charles Phillips:商业软件领域的“乔布斯” 留住你的用户:8款第三方移动推送服务 人气最旺:主流移动应用创建工具大合集(一) 不要强迫用户注册,请让他们先试用产品 Eve:基于Python的REST API框架 想扩展你的数据库吗?那么先了解一下I/O 白帽黑客将现场爆料Android系统及框架漏洞 9月13日:程序员节,一起来过节吧! 欲与Siri、Google Now比高低:微软开始打造个人助理Cortana 【开源专访】禅道创始人王春生:覆盖项目全周期,回归管理的本质 携程无线创业者大赛成功落幕 梁建章为头名“快展”颁20万奖金 Bug报告:小角色,大用处! 图片存储 请问双绞线-集线器以太网中的两台计算机最大距离是多少? 请推荐数据库编程的好书 各路高手:告诉我该学JAVA还是VS.NET 如何将C++中的string转变成char,我要将char变量与string中的字母作比较? 他们不上传图片也能显示图片,怪怪也.? 急!!!!REDHAT 7.2启动进不了X-windows界面,提示如下 rose2001中怎么找不到用例边界(方形)这个UML标记?有use-case package这个版型吗? __int8 _int16??菜鸟请教 哪有《Windows2000编程技术内幕》中文电子版? sql查询语句中将Null值转为0呢. 我自己编的控件为么有的机器能下载,有的不能? 如何加载控件? 强烈推荐!" 在QQ上如何弄的别人神经分裂???//owner: onice (西瓜的眼泪) " 请问如何在XML字符串中传递中文 压缩原理究竟是怎样的? 如何用javascript创建树形菜单 ftp 你的上网速度低于1m就不用看了 请问在VC中使用ADO连接Oracle数据库,如何判断连接断开 关于C++BUIDLER的学习 ====我的显示器以前好好的不知为什么现在闪呀闪的弄的我眼睛疼啊!我重装了系统又重装了显卡驱动程序,可是还是 闪!请问我该怎么办?谢 各位大哥,小弟有段初级链表程序,有些问题,请斑竹和高手解答,谢谢!!!!!! 如何让EDIT控件换行显示数据? 想考计算机系的研究生,请大家给点建议 各位大哥,小弟有段初级链表程序,有些问题,请斑竹和高手解答,谢谢!!!!!! 关于路径设置的问题,为什么没人回答呢??? 叶剑英的孙女,李泽楷和曾荫权都在追 100分送上!!我都快被ADO逼疯了!!!真他妈的服了,各位给我指点一下吧,急用呀!!! 在linux下的C对数据库编程中,嵌套SQL语句的格式 如何启动备份服务器! 如何在窗口下对datawindow的数据进行修改后保存? 火急!急!急!急!急JBuilder完全安装怎么没有InterBase,哪又怎么安装? 求救!!! 明天上班,终于结束失业期了。 一个ORACLE备份数据导入问题。请高手指点! VC和VB下好用的控件在delphi下不好用!是不是dll的问题? 明天上班了,同喜! 大家觉得POWERSOFT公司的PB9会推出WEB SERVICE功能吗? 一个ORACLE备份数据导入问题。请高手指点!!! 请教各位高手,DirectX环境下,是否可以利用各种输入法输入汉字? 急,高手帮忙。 getchar小问题,为什么程序不能中断? 我想学游戏编程,谁能指点一下?100分! 医疗管理系统 请帮忙看看这段流操作的代码错在哪里? javabean高手请进!请赐教!!! 请各位高手指点一下,什么软件开发java比较方便,效率较高? 谁能告诉我,怎样将邮箱中的信件复制到本地硬盘.谢了 需要什么权限才能在active directory里添加用户??(实际上是想添加email帐号),谢谢各位 test 请问在winXP里该如何实现如下功能呢? NUK的塑料奶瓶也有毒吗? 已知在高温下,14号元素单质与另一种物质能通过化合反应制成光纤,该化学反应方程式是: 虫洞、虫洞效应、虫洞理论,还有虫洞是不是有时光旅行这一方面,虫洞可靠吗? nuk塑料奶瓶安全吗 酸和其它物质反应会生成单质吗?酸能不能和非金属反应? 虫洞,关于时空旅行((近光速飞行历史上最快的有人驾驶飞行器,是“阿波罗十号”.它达到每小时25000英里.但若想在时间中旅行,我们必须再快2000多倍.我们需要一部足以携带大量燃料的庞大 与银离子有关的沉淀除了氯化银还有白色的吗? 铵根离子与氢氧化钠反应,不加热的条件下,有沉淀生成吗? 时间是否会停止.宇宙外面是否还有宇宙.反物质,暗能量.究竟在何处,虫洞是否存在.宇宙是否会灭亡 为什么一定会含有氯离子呢?硫酸银也是白色沉淀啊某钠盐溶液可能含有阴离子NO ,CO ,SO ,SO ,Cl ,Br ,I ,为鉴定这些离子,分别取少量溶液进行以下实验:①测得混合液呈碱性;②加HCl后,生成无色 铵根离子 电子式质子数:氮+4氢=11 电子数:氮+4氢=11一个质子提供正价多出来的一个氢电子呢? 铅铋混合溶液中铅铋含量测定的公式 加入盐酸产生白色沉淀就说明溶液中一定有银离子吗如题 化学变化过程中一定伴随有物理变化,那么大理石和稀盐酸反应时伴随的物理变化是什么? 铅铋合金中铋和铅的连续配位滴定1. 实验过程中,不使用已标定好的EDTA标准溶液,为什么还要改用金属锌作基准物质重新标定一次?2. 滴定bi3+要控制溶液酸度pH~1,酸度过低或过高对测定结果 铁,铜和盐酸反应分别会有什么现象 矿石内涵金吗 请把碘量法测铜的具体过程和反应式列出来要正规.随便概述一下了事就不必发了. 从高炉中炼成的铁与盐酸反应会有什么现象 越南铅银矿石如何取样我是一名取样工作者,每次对越南铅银共生矿(原矿·铅:约60%银约3000克每干吨)总是第一次取样和第二次取的样不同:铅的含量一样,可是银的含量有200克至300克每干 铅铋混合液中铅铋连续测定中为什么要用六亚甲基四胺 硫既有氧化性又有还原性,分别写出硫与氢气、钠、铝、铁(生成FeS)、氧气反应的化学方程式 天津上金矿产21综合会员是什么单位 非金属单质能与酸反应吗?非金属单质能否与酸反应生成盐和氢气?如果能,请举例说明. 铁与盐酸、稀盐酸反应现象现象:铁丝表面生成什么,溶液由什么颜色变为什么颜色 水银能转化为银吗,铅能转变为金吗? 一种金属单质与两种酸反应在线等哪种金属先反应比如HCl 与 AgNO3,Fe(NO3)2混合物哪个先反应 为什么物理题答案会被百度拦截?复制后回复我试试电场加速度a=F/m=(qE-umg)/m(1)F=mg(2)S=(Vb²-Va²)/(2a)(3)自由落体时间时间 t=(√2h)/g能量QB=0.5mVb²能量QC=QB-mg·2R即0.5mVc² 单质和水反应能生成酸吗? H2S+H2SO3=? 银离子在氯化铵溶液中是先和铵根络合还是先与氯离子沉淀?为什么? 在短周期元素中,什么元素单质能与水反应生成两种酸?为什么不是Br或I 用电子式表示H2S的形成过程 浓酸与金属单质反应为什么生成水?稀酸与金属单质反应生成H2,但浓酸则会生成水,这是为什么?是不是分子之间距离的差别 F 、Cl 、Br 、I四种单质与水反应容易程度为什么是F> Cl> Br >I呀 广州有没做氧化锌的厂,我们是做发泡鞋的,需要氧化锌!哪个牌子的好 金属是一种能跟酸反应生成氢气的固体单质吗? SO2与CL单质的水溶液反应生成什么.写出化学方程式 佛山哪里有氧化锌卖,最好是厂家,我们做陶瓷原料用的 反物质与正物质接触会发生什么情况? 三氧化二铁 盐酸反应现象 现将含ZnO百分之50(其他成分不含锌)的矿石10吨与一定量的赤铜,木炭粉混合后加热到800度,反应完全可得到含锌百分之65的锌铜合金是多少吨?(列式计算,计算结果保留1位小数量 在数列(an)的通项公式为an+1=an+2+an,a1=2,a2=5,则a6的值是? 三氧化二铁与盐酸反应生成什么 可燃物本身的性质,氧气浓度的大小,可燃物与氧气的接触面积分别对燃烧有什么影响,举例说明.要举例子, 铵根离子的讲解 铅锌矿化验方法!要全面的,急.我想知道化验方法.结果的算法.还有药水的配制. 下列不属于燃烧条件的是 A. 可燃物 B. 温度 C. 氧气(空气) D. 接触面积大 利息税率的计算公式?最好是全部公式, 为何银离子能何铵根离子发生络合反应? 铅锌矿中锌镉含量的测定的实验中 如果测铅应该怎样进行? 在你心中母爱是什么? 下列物质可以由单质经化合反应直接得到的是a.CuSb Fe2S3c FeCl2d Al2S3 ABC三种短周期元素处在同一周期,A单质与水反应时发生自身氧化还原反应,B单质雨水ABC三种短周期元素处在同一周期,A单质与水反应时发生自身氧化还原反应,B单质与水剧烈反应且B单质为还原 你对人体能自动识别、吸收食物中的营养成分的“大道”认识多少?希望能得到从中医甚至中国哲学的高度的诠释. 下列物质中,既可以通过复分解反应制取,又可通过单质之间的化合反应制取的是A.FeS2 B.CuS C.FeS D.FeCl2帮忙写一下各项相关的制取方程式, 气体H2S用氢氧化钠吸收 请问整个反应过程是什么?为什么最后会生成NaHS而不是Na2S 向心加速度的公式是怎么推导出来的?书上说是通过a=v/t 来推导出向心加速度表达式An=V²/r 这个公式是怎么推导出来的呀?还有啊,向心加速度的方向是指向圆心的,也就是说这个力是向圆心 下列物质中既可以由单质与单质化合,也可以由复分解反应制得的是( )A.三氯化铁 B.三氧化二铁 C.硫化铝 D.氯化亚铁请写出各选项的方程式! 世界上真有冲动吗,通过虫洞能进行时空旅行吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘