如何为 delphi6 添加 新的鼠标 图标 ????????????????????我觉得 delphi的 手型 鼠标图标不够好看 ,如下图所示(红色圈的地方):http://www.ttx.com.cn/bbs/v0qdu_2004-7/2004-10/20041028184958897.jpg
我想把它换成像 IE 的 手型 鼠标图标 ,如下图所示:http://www.ttx.com.cn/bbs/v0qdu_2004-7/2004-10/20041028185338653.jpg
请问如何换成像 IE 的 手型 鼠标图标 ??
我想把它换成像 IE 的 手型 鼠标图标 ,如下图所示:http://www.ttx.com.cn/bbs/v0qdu_2004-7/2004-10/20041028185338653.jpg
请问如何换成像 IE 的 手型 鼠标图标 ??
解决方案 »
- 毕设答辩时间要到了,求助关于如何使用第三方控件,详情看帖。。
- 定制程序需要多少钱
- 送分100分:求几个VC6中的数据类型与DELPHI6相对应的数据类型
- adoquery1中使用监时表查询
- webbrowser 导致应用程序死机
- sql server数据库异常处理时的奇怪现象!急,高分求解
- 请问~~~~~~~! 很急的 怎么才能每次登陆的时候不出现登陆框库的 ACCESS2K 的库
- 请问is和as运算符的区别,举例说明,谢谢!
- Ehlib高手们请进!
- delphi的dll库中语句执行返回程序出错!dll中加上不相关的语句就可以!是borland的一个大bug!!!?
- 关于Form 的close问题?
- 奇怪的DLL调用问题,在线等~~~~~
Screen.Cursors[crZoomOut] := LoadICon(HInstance,PChar('ZoomOut'));
一.什么是资源(Resource)
广义的资源,是指在编程当中可以使用的任何的图片、文字、声音、文件等等。狭义的资源,是指经过特殊方法编译的包含在可执行文件(EXE、DLL等等)中的供程序使用的图片、声音、文字和文件等等。我们在这里所说的资源指狭义的资源。资源的使用,就好象烧菜,作一道菜要求色香味俱全,做程序也是这样,利用这个资源可以使程序色香味俱全。不管那本书,还有互联网络上面,关于资源的文章都是非常少的,下面是作者使用资源的一些心得和技巧,而且关于资源的论述和说明都是比较详细和齐全的。二.资源脚本
在Delphi中,要使用资源(在VC中也一样),需要先编写一个资源文件脚本,不是能够拿来就用的,就和吃饭一样,都先要煮一次一样。资源脚本编写好之后,然后用资源编译器进行编译,得到一个临时的资源文件(.RES),最后,程序编译的时候,包含这个RES文件,这样就可以在程序中使用资源了。1) 资源类型
资源类型分为两种:预定义和用户自定义类型A) 常见的预定义资源类型BITMAP
位图资源
LANGUAGE
定义语言资源
CURSOR
光标资源
MENU
菜单资源
STRINGTABLE
字符串资源表
DIALOG
对话框资源
VERSION
版本资源
FONT
字体资源
ACCELERATORS
快捷键资源
MESSAGETABLE
消息表资源
其中红色的是大家应该掌握的,蓝色的大家也要用到,但是可以使用Delphi提供的手段来完成,不需要大家用资源脚本来编写。版本资源将在后面的内容中单独讲解。其它的不需要大家掌握,这些在VC中使用的比较多,因为Delphi有自己的处理方式,没有必要用到他们,否则就丧失了Delphi进行RAD开发的优势。B) 用户自定义格式资源有一个预定义的表明是用户自定义资源的关键字:RCDATA。除了系统预定义的这些关键字之外,凡是其它的名字如EXEFile,AVIFile,Test等等,都视为用户自定义资源类型。一般用户自定义资源是有的程序需要带一些附加资源,或者需要包含其它的文件,但是作者在发布程序的时候出于某些原因,不希望很多文件或者保密等等,就把这些附加的文件包含到EXE里面,那么EXE运行的时候,再临时释放出来,使用之后又删除。2) 常用资源脚本命令格式
说明:i) BEGIN,END:用于表示资源块的开始、结束,字符串用双引号括起来;D) 资源定义的顺序没有关系;E) 命令大小写无所谓,注释采用//格式,每一个资源定义中间不要用其它分隔符;F) 每一个资源都有一个名字或者整数标志用于区分资源。因为整数标记比较难于记忆,容易混淆,随意可以采取常量定义帮助记忆,常量定义采用#Define格式,例如#Define ID_FORMCAPTION 100;G) 可以包含其它文件,用#include包含即可,例如:#include “consts.pas”,这个功能主要用来配合Delphi来使用常量定义。C) 定义位图资源格式:ResourceName BITMAP “BitmapFileName.BMP”这个命令用于把BitmapFileName指定的位图文件,变成一个名字为ResourceName的资源。BitmapFileName可以带路径,也可以不带,不带路径的话,则默认为当前目录下的文件。BitmapFileName这个文件必须存在,否则编译资源的时候出错。D) 定义光标资源CursorResourceName CURSOR “CursorFileName.CUR”说明同Bitmap。E) 定义图标资源IconResourceName ICON “IconFileName.ICO”同上。F) 定义字符串资源字符串的定义如下:STRINGTABLEBEGIN ID_CAPTION,’这是一个常量定义的字符串,很好记忆的’ 102,’这是一个整数定义的字符串,看看你记不记得住?’ …ENDG) 用户自定义资源这是一个很重要的,其实也和前面差不多。MyFileRes DemoTest “FileName”用户自定义资源很不同的操作之处在于后面Load资源的代码上面。
为了让大家熟悉资源脚本的编写,下面给出一个比较全面的资源脚本范例,在实际的编程当中,大家可以根据需要删除或者修改、添加一些内容就可以了,这个文件可以作为资源脚本文件的模板。///下面的文件内容是脚本文件和Delphi共享的文件内容///FileName:MyConsts.Pas///*******Cut From Here*********///unit images; interface const IDB_WARNNING = 1; IDS_MESSAGE=2; ///…implementation end.///*******Cut End Here*****************///从下面开始是资源脚本文件内容///FileName:Demo.RC///*******Demo.RC:Cut From Here ******///#include "MyConsts.Pas"#define ID_OK 100#define ID_CANCEL 101#define ID_PROMPT 200#define ID_LABEL 500#define ID_GROUPBOX 501#define IDC_RADIO1 502#define IDC_RADIO2 503#define IDC_EDIT1 504#define ID_FILE_OPEN 310#define ID_FILE_EXIT 311#define ID_EDIT_COPY 320#define ID_EDIT_CUT 321#define ID_EDIT_LINK 322 ///----Define Bitmap Resource--------//////下面用字符串来区分资源Photo BITMAP "C:\Windows\Wallpaper.BMP" ///文件名可不用"",但建议使用""///下面用整数来区分资源,其它类型资源定义类似IDB_WARNNING BITMAP "Warning.BMP" ///----Define ICON Resource--------////Girl ICON "Girl.ICO" ///----Define Cursor Resource------////HandPoint CURSOR Hand.CUR ///----User Define Resource-------////MyResource MyFile "MyFileName.Ext" ///----Define String Resource-----////STRINGTABLEBEGIN ID_OK,"确定" ID_CANCEL,"取消" ID_PROMPT,"Delphi课程演示程序" 102,"这是一个直接用数值定义的字符串"END ///----Define MainMenu Resource----///////定义的菜单如下图////┏━━━━━━━━━━━━━┓////┃File Edit ┃////┣━━━━┳━━┳━━━━━┫////┃Open ┃ ┃Copy ┃////┣━━━━┫ ┃Cut ┃////┃Exit ┃ ┣━━━━━┫////┗━━━━┛ ┃Link ┃//// ┗━━━━━┛DemoMenu MENU DISCARDABLEBEGIN POPUP "&File" BEGIN MENUITEM "&Open...", ID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "E&xit", ID_FILE_EXIT END POPUP "&Edit" BEGIN MENUITEM "&Copy", ID_EDIT_COPY MENUITEM "C&ut", ID_EDIT_CUT MENUITEM SEPARATOR MENUITEM "HyperLink...", ID_EDIT_LINK ENDEND ///----Define A Dialog-------////IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 187, 98STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENUCAPTION "对话框"FONT 10, "宋体"BEGIN DEFPUSHBUTTON "确定",IDOK,130,7,50,14 PUSHBUTTON "取消",IDCANCEL,130,24,50,14 LTEXT "Test Label",ID_LABEL,21,13,35,8 GROUPBOX " Group Box: ",ID_GROUPBOX,14,28,90,40 CONTROL "Radio1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,21,37,39, 10 CONTROL "Radio2",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,21,53,39, 10 EDITTEXT IDC_EDIT1,14,71,89,12,ES_AUTOHSCROLLEND ///*******Demo.RC:Cut End Here******/// 资源脚本的编写很麻烦,有没有简单的方法来编写呢?有!利用VC++即可。Borland的Brcc32.Exe可以编译VC写出来的RC文件!不过在编译VC写的RC文件之前,必须修改RC文件,把其中的Include “afxres.h”删除即可。则真的是一件很奇怪的事情,Brcc32可以编译VC写的资源脚本,而VC的资源脚本采用的却是BEGIN..END,而不是{},好象有Pascal的味道哦。:)三.资源的编译
如果用户使用自己的资源的话,Delphi不会自动编译资源,需要手动编译。在Delphi中能够自动编译的资源是窗体,大家打开一个窗体的pas文件就可以看到{$R *.DFM}这样的语句,这就是窗体资源。如果要编译资源,请采用下面的命令即可:Brcc32 ResourceScriptFileName上面是一个DOS命令,可以命令提示符下面运行,其中Brcc32就是编译资源的命令;ResourceScriptFileName是资源脚本文件的名字。运行之后,如果没有错误,那么会生成一个同名的.Res文件。Brcc32命令有很多的附加参数,请使用Brcc32 /?获取详细的说明。资源脚本经过编译之后,可以不依赖原来的文件,单独使用。注意,如果你的程序没有修改,而修改了资源的话,需要用Build All来强制编译所有的程序文件,这样才能保证你的程序是正确的。否则,根据Delphi的增量编译原则,没有修改的程序文件是不会编译的!四.资源的使用
编译指令:{$R FileName.RES}
{$R FileName.RES}这个编译指令用于指示编译器在编译生成EXE或者DLL的时候,把指定的资源文件也包括进来。这个编译指令应该包含在implementation部分,写在{$R *.DFM}附近。如果你的程序中使用了某个资源,而又没有使用$R指令包含到EXE(DLL)中的话,你的程序将不能正常运行。
ResourceString是一个关键字,用于定义资源字符串常量。我们知道普通的字符串常量用const就可以定义,但是const定义的字符串是内嵌在程序代码中间的,不是资源,而ResourceString定义的字符串使用的时候和const定义的是一样的,但是是作为资源保存在EXE(DLL)中间的,并且ResourceString也避免了写资源脚本和编译资源的麻烦。装载资源
需要注意的是,在使用某些API函数Load资源的时候,一般都需要一个ResourceName或者ResourceID,而这些函数的参数类型都是Pchar,因此,如果使用ResourceID的话,直接使用100这样的数是不行的,必须用MAKEINTRESOURCE(100)来代替。具体的例子,请看下面的LoadCursor!位图资源的装载如下:VarBmp:TBitmap;BeginBmp:=TBitmap.Create;Bmp.LoadFromResourceName(hInstance,’ResourceName’);///或者是 Bmp.LoadFromResourceID(hInstance,ResourceID);…Bmp.Free;End;字符串资源的装载如下:ResultString:=LoadStr(StringID);遗憾的是,Cursor资源没有LoadFromResource的功能,因此,Load一个光标资源比较麻烦!需要借助于一个临时文件或者利用API函数。LoadCursorFromFile(‘CursorFileName’);LoadCursor(hInstance,’ResNameOrResID’);///例:LoadCursor(hInstance, MAKEINTRESOURCE(100));///例:LoadCursor(hInstance, ‘Hand’);装载Cursor代码如下:Screen.Cursors[curIndex]:=LoadCursor(hInstance,’Hand’);Control.Cursor:=curIndex;一般的做法是定义一个常量,例如const MyCursor=20;然后用类似的代码即可:Screen.Cursors[MyCursor]:=LoadCursor(hInstance,’hand’);Memo1.Cursor:=MyCursor;当然,你也可以使用预定义的常量如crHandPoint等等。如果要是整个程序的光标都改变的话,只要用如下的代码即可:Screen.Cursor:=MyCursor; 图标资源的装载和Cursor类似,有一个LoadIcon()API可以装载Icon!例如: LoadIcon(hInstance,’AppIcon’); 自定义资源的装载,比较麻烦,不过幸好Delphi提供了一个类TResourceStream,这样可以比较方便和轻松地装载资源了。装载自定义资源的时候,需要一个资源类型,这是一个Pchar类型的参数,请传入和RC中一样的名字即可。利用TResourceStream可以做到很多的工作。下面的代码是把在Exe里面的一个类型为ExeFile的自定义资源提取出来,保存称为一个临时文件。procedure TMainForm.GenUpxExeFile;var UpxExeStream : TResourceStream;begin UpxExeStream := TResourceStream.Create(HInstance, 'ExeFile', 'EXEFILE'); UpxExeStream.SaveToFile(UpxExeFileName); UpxExeStream.Free;end;Delphi应用程序文字信息的汉化
我们知道,当Delphi写的应用程序使用ShowMessage或其它类似的函数的时候,显示的对话框中按钮的文字或信息是英文的,这出现在一个中文程序中就很别扭,那么有没有可能把Delphi中的这些错误信息变成中文的呢?答案是:当然可以。有两种方法可以做到这一点:第一种,采用修改EXE的方法。当程序编译完成之后,会生成一个EXE,其中就包含了那些英文信息,此时,可以采用资源编辑工具如ExeScope,VC等等对这个EXE进行编辑,修改其中的英文为中文即可。这种方法有几个很大的缺点,首先是你每编译一次,那么你要分发程序给客户使用的话,就必须修改EXE一次,这样重复劳动,费力不讨好;其次,如果你写了多个不同的程序,那么每个程序的EXE你都要修改一次,很麻烦;还有,因为编译之后,字符串的长度就固定了,因此,你在修改EXE的时候,需要注意翻译过来的文字的长度不能超过原来的,这样就有很大的限制。第二种,采用修改Delphi的Source Pas文件的方法。这个方法是最好的,克服了前面的那种做法的缺点。推荐使用修改PAS文件的方法。我们知道,Delphi发布的时候,已经把VCL的源代码文件也一起发布了,在$(Delphi)\Source目录下面就是Delphi的源代码文件,特别是VCL子目录,就是Delphi这个VCL核心的源代码,我们是可以修改