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

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

运用MSChart,生成统计图形-VB资料 向文本框等等控件的系统右键菜单里追加自己定义的菜单-VB资料 在VB中用定时控件实现长定时操作 在Visual Basic中,在GotFocus事件中快速选定文本 在程序中注册和注销 OCX 控件 -VB资料 在运行时维护DBGRID的栏位宽度-VB资料 VB怎样使用VB开发基于Sybase的C/S软件 VB怎样在运行时动态生成多个相同的控件 直接编辑VB中网格控制项的两种方法 自制控件方面的有关知识-VB资料 Unicode vs Ansi -VB资料 VB 中调用 Word 拼写检查 VB4.0安装程序的汉化 VB中对字符串的处理及其扩展 把符串中的一子串替换为另一子串 -VB资料 把数字转成英文字-VB资料 翻转一个字符串-VB资料 混合字符串的长度 -VB资料 将阿拉伯数字转成中文字的程式 -VB资料 将包含有Null结尾的字符串转换为VB字符串 切分字符串-VB资料 清除字符串中指定的字符 -VB资料 VB如何取得计算机的所有字型? VB如何取得中英混合字符串的长度? 使VB的网格控件具有输入功能 VB如何使用未安装的字体? VB如何由两个ASC码(区位码)复原成一个汉字? VB如何转换C代码中的高字和低字 一些字符串操作的问题和回答 -VB资料 VB怎样把VC++代码转换成VB代码 字符串中包含双引号-VB资料 关于main(int argc,char *argv[]) helpme 如何对vb源代码加密 讨论,关于Swing做的Applet! SUN前途堪忧! explorer007(KKcat):麻烦一下,请把你写的游戏TANK的源代码给我发一份(lyf545@263.net),谢谢!!!! sql server中删除一条记录不成功!? Bad Dream about a Coffin 我要用delphi作个学生管理系统,大家给点意见 有声卡,为何没有声音,具体操作如何?一定加分!!!! What a country ! 交流交流多线程程序的开发经验好吗? 谁有关于ejb方面的书或者资料推荐??一定给分 Women over 50 谁编个例程给我,这50分就是谁的了。题目不难,相信高手5分钟就能做完。 jdk1.3+jswdk1.0.1 的JAVAbeans .class文件要放哪啊????? God painted it 提问:猪真的很幸福吗?要求 wywq(幸福如猪) 回答。 哪位高手做过可视电话的? VB能不能实现“一个结构体类型的数组当参数传递 Forgotten Birthd Husbands Overheard Fine 有个在多线程中使用ADO的问题。请高手们帮忙。 Suede jacket 可能是installshield的Bug! 我想去北京找个工作,请大家帮帮忙,提供点信息! 装了“猫”为何还有630错误(电话线也接了)? excel 問題 各位:数据窗口有一检索变量,现在想retrieve出所有的记录,检索变量应该怎样赋值?谢谢! linux和windows是不是只能分别装在两个分区中 关于图像处理:如何使图像锐化与柔化? 帮帮我啦! 我在使用jdbc读取数据的时候,碰到了内存溢出的问题,怎么回事呀 哪里有餐饮系统的介绍?90不够的话,先欠着,多谢了! 在两个ASP程序之间怎么传递参数? ccl2000(不帅不酷的Goblin):其实你真的很酷很帅的。 大侠帮帮我啦(关于SQL语句的问题) 关于Vxd的编译问题 用VC编的程序,一运行就说“执行非法操作”,问题出在哪里?? SQL Server有病 一个关于api的简单问题 《易佳自定义报表》用后很失望 请教各位高手一个有关报表控件的问题? 小妹向大家请教!可不可以直接在本页的代码中改变该页面浏览时的属性? 家菲猫:惊悉你昨晚惨遭不幸,被窃大量钱物,今日一天无法和你联系上,估计手机和通信录已全部丢失,如果今晚无法来我处,明早8点以前请务必携猫 MM 赶到上海南站!!! MDI文档模板和应用程序调用问题请教,大侠请进! 一个c++问题???? 请问各位高手,sqlserver2k加密的存储过程是否能解密,看到它的实际的语句?可否能跟踪加密的存储过程? 我下载了一个formula one ,发现她的界面跟excel差不多,在pb中怎么用? 高分求XML 高级编程(足本)[01.pdf到10.pdf]!!!! 招聘汇编程序员 ie 中true dbgrid 的问题 同一主族的元素,原子半径与单质的熔沸点成正比, 如何判断碱金属、碳族、卤素、氮族、氧族单质的熔沸点变化? 实验室用铜和稀硝酸制取NO,反应过程中有6.3gHNO3被还原,则参加反应的铜是多少 对于同一周期的主族元素,单质的熔沸点逐渐升高,请举例说明! 为什么氧族,卤素单质熔沸点逐渐升高?氧族,卤素单质的熔沸点是否与共价键强弱有关?有的话,随着原子半径的增大,共价键应该是逐渐减弱,溶沸点也是降低啊! 丙炔制丙烯方程式 非金属的气态氢化物的热稳定性和熔、沸点分别与什么有关? 碱金属元素的熔沸点为什么卤单质是分子晶体熔沸点与分子量有关,相对分子质量越大熔沸点越高.碱金属是金属晶体熔沸点与原子半径有关原子半径越大熔沸点越高. 请问丙炔和丙烯的电子式怎么写?RT 非金属氢化物的熔沸点越高,是不是可以说其越稳定?非金属氢化物的稳定性与什么有关? 短周期,同主族非金属单质熔沸点都是第三周期大于第二周期吗 丙烯和丙炔怎样鉴别最好能有化学反应式, 氢化物沸点 稳定性与金属性 非金属性的关系 为什么同周期的非金属单质熔沸点随核电荷数增大而降低? 怎样区别丙炔和丙稀 单质熔沸点的高低怎么比较?规律 非金属熔沸点问题..急不是说非金属性越强.熔沸点越高.可同主族从上向下熔沸点依次升高,而非金属性却依次降低.为啥?单质与元素不同?有啥不同? 丙炔与一分子溴化氢反应制2-溴丙烯为什么用HgBr2作催化剂 元素周期表熔沸点的递变规律同一个主族是什么变化的?同一个周期是怎么变化的?我记得有一个主族熔沸点是先增大后减小,有吗?最好能给出图答的好可以再加分 碱金属和卤素熔沸点及密度变化规律只需简单的说一下就好 不要一大篇 说了半天看不懂的那种 就说碱金属和卤素熔沸点和密度随着质子数变化得规律就好啦^ω^ 丙酮如何生成2-羧基丙烯 怎么从元素周期表中看氧化物熔沸点的大小 如何通过熔沸点判断金属(非金属)性的强弱? 丙烯醛和丙酮在NaoH作用下生成什么 求元素的,半径大小,还原性,氧化性,熔沸点在化学元素周期表规律如题 碱金属单质的熔沸点随着核电荷数增大而降低为什么是错的? NaOH能与哪些官能团反应?rt,我一直搞不懂NaOH会和哪些官能团发生怎样的反应,快高考了, 物体的熔沸点在元素周期表的规律是什么?说的简单些,我是高一的,告诉我规律就行了,不用说那种很难懂的定理的 为什么碱金属的熔沸点低1)为什么碱金属的熔沸点很低?2)为什么随着核外电子数的增加,沸点越来越低3)沸点与金属键有什么直接的关系?沸点到底与半径有没有关系啊? 有机化学中哪些官能团和氢氧化钠反应哪些官能团和氢氧化钠反应,和钠反应,和碳酸钠反应,和碳酸氢钠反应? 元素氢化物的稳定性,沸点,还原性,酸碱性在元素周期表内呈现怎样的递变规律请帮我归纳下我还会加分 碱金属熔沸点问题碱金属周期表上从上到下,相对原子质量上升,即分子间作用力不断增大,熔沸点升高,但实际上熔沸点下降,为什么? 有机化学中,能与氢氧化钠溶液反应的官能团有哪些? 非金属氢化物稳定性与熔沸点有无关系 丙烯的化学式? 高中有机化学中,那些能和NaOH发生水解反应 比较两相邻元素的非金属性强弱可否用氢化物的沸点来判断?注意是相邻的两个元素 丙烯化学式:结构式? 苯和丙烯制苯酚和丙酮的化学方程式 为什么水的沸点即液态的沸点,比气态的沸点高?请回答, 烷烃,环烷烃,芳烃,炔烃,乙烯,丙烯,丁二烯,苯,甲苯,二甲苯,乙醇,的化学式怎么写?按顺序写, 有机化学系统命名 :CH3CH2C(CH3)2C(CH3)=CHCH2CH(CH3)CH3我命名的是:2,5,6,6-四甲基-4-辛烯 (不用考虑Z和E的情况) 书上的答案是3,3,5,7-四甲基-4-锌烯.请问我错在哪里了?我是按照最低序列取的 在保 同主族氢化物熔沸点与氢化物稳定性的关系RT 不考虑氢键的N O F情况下 为什么从上至下氢化物稳定性降低而氢化物熔沸点升高 不应该是稳定性高的熔沸点也高么 乙烯的化学式为了方便回答者准确理解,请您对问题标题或内容进行补充. 丙酮怎么合成(CH3)3CCOOH的? 单质的熔沸点与元素周期律有什么关系? 如何利用乙烯,丙稀,乙炔,丁二烯等简单的有机物合成2-甲基-2-丁烯? 如何给有机物 CH3CH2C(CH3)2C(CH3)(C2H5)H 正确命名呢? 不同型号的柴油能不能混合使用 什么因素影响同组元素单质的熔、沸点如氧族单质熔沸点依次升高能不能从原子内部结构作答 实验室制取NO的反应离子方程式是______,检验NO的方法及现象是______. 在元素周期表里,怎么判断熔沸点高低. 第一主族和第七主族元素单质熔沸点变化趋势相反的原因 实验室制取NO必须用排水法,由此得出 -单选题a.NO难溶于水 b.NO的密度和空气接近 c.NO会与氧气反应 元素周期表中单质熔沸点变化规律氢化物熔沸点变化规律 碱金属熔沸点为什么递减?而卤素相反? 为什么实验室制取CO、N2、(NO)时只能用排水法收集? 元素周期表中元素单质熔沸点规律.说明白点. 为什么c族元素不像卤素和碱金属单质那样熔沸点有规律? 在实验室制取NO,和NO2气体时,分别用什么来收集
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn