大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 程序开发 -> 在Delphi中使用自定义光标

在Delphi中使用自定义光标

时间: 2021-07-31 作者:daque

开拓者都蓄意本人的步调有一个和睦的界面,此时,一个灵巧绚烂、有展现力的光标就必不行少了。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中调节和测试经过。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.