在delphi消息框中显示自定义图标

以下程序可实现在delphi中显示自定义图标:

 

  

资源文件的制作:

注意事项:创建的资源文件名不要和工程名相同,因为Delphi创建工程时会自动创建一个和工程名相同的资源文件。并且最好将资源文件保存到和工程文件同一个文件夹中。

 

1、首先创建一个.Rc的纯文本文件。格式如下:
         
资源标识符 关键字 资源文件名
   
格式说明:
    ①
资源标识符:程序中调用资源时的特定标号;
    ②
关键字:标识资源文件类型;例如:
        Wave
: 资源文件是声音文件;
        RCDATA
JPEG文件;
        AVI  
AVI动画;
        ICON
: 图标文件;
        BITMAP
: 位图文件;
        CURSOR
: 光标文件;
        RMI  
RMI音乐文件;
        MIDI
MIDI音乐文件
    ③
资源文件名:加入的资源文件名;
    ④
举例:  

               mypic Bitmap Water.BMP //加入位图

               mywav WAVE happy.wav //加入声音
                              myAVI AVI EPOEN.AVI //
加入视频
                              myIco ICON CJT.ICO //
加入图标
    假设我们把上述5行保存成myres.rc文件。

mycur cursor move.cur //加入光标

   

 

2、使用Borland资源编译器(BRCC32.EXE)转化.rc文件成.rec文件。

DOS命令行下输入下列命令:
C
                                     //转在C:
CD/                                     //
退回根目录

CD/Program Files/Borland/Delphi7/Bin    //进入BRCC32.EXE的所在目录
Brcc32 myres.rc                        //
myres.rc转换成资源文件myres.res

    注意转换前需要把myres.rc文件中指定的未带全路径名的文件Copy进当前目录C:/Program Files/Borland/Delphi7/Bin中来,才可保证转成.RES文件不出错。如果转换过程没有报错,则成功

 

3、引用资源文件
   
把上一步骤生成的资源文件myres.res放到要建立的工程的同一个目录中来。
   
为了存取我们的资源文件,必须告诉Delphi链接我们的资源文件到应用程序中。因此要在源代码中加入一条编译指令完成上述功能。这条指令必须紧跟在窗口指令后,如下形式:
    {$R *.DFM}                             //Delphi
自带编译指令
    {$R Sample.RES}
                       //新加入的编译资源文件的指令
   
不要删除{$R *.DFM}指令,因为这行代码告诉Delphi链接下面的资源到窗口的资源中。

 

下面的语句可以用来改变动态应用程序的图标:
procedure TForm1.Button3Click(Sender: TObject);
begin
    Application.Icon.Handle := LoadIcon(hInstance,'myIco'); //动态改变应用程序图标
end;

 

应用程序在运行当中经常要输出各种即时信息,Delphi提供了多种形式的消息对话框可以满足这些要求,尽管可以使用各种标志定制一个消息框,但仍不能将自己的图标放在消息框内,也不能修改其标准行为去创建自己的消息框,其实通过调用函数MessageBoxIndirect()就很容易绕过这些明确的限制,这是一个功能很强、易于使用的函数。 ---- 此函数在WINDOWS单元里面,文件位于Delphi安装路径Source\Rtl\Win里面,需要指出的是,Delphi的原代码中它的返回值类型是BOOL型,而实质上它的返回值应为Integer。修改方法:在WINDOWS单元中找到此函数后,把BOOL改为Integer,共有三处要修改,然后在Delphi安装路径Lib中找到WINDOWS.DCU文件,把它改名或者删除,并把修改后的WINDOWS.PAS源码复制到Lib路径中。 ---- 该函数只有一个参数,类型是TMsgBoxParams,它的结构及说明如下: tagMSGBOXPARAMSA = packed record cbSize: UINT; {数据结构的长度} hwndOwner: HWND; {所有者窗口句柄} hInstance: HINST; {应用程序实例句柄} lpszText: PAnsiChar; {在消息框客户区内显示的文本} lpszCaption: PAnsiChar; {标题栏文本} dwStyle: DWORD; {确定消息框内按钮和图符 的数量及种类的MB_标志} lpszIcon: PAnsiChar; {从资源文件中取出的一个 图符资源的名字} dwContextHelpId: DWORD; {指定帮助文本的ID号} lpfnMsgBoxCallback: TPRMsgBoxCallback; {当用户按下HELP按钮时调用的一个回 调函数} dwLanguageId: DWORD; {显示在按钮内文本的语言定义} end; ---- 由于直接使用此函数比较复杂,我们可以自定义一个函数来封装此函数,对它进行简化,在用法上尽量做到与Delphi消息框相一致,自定义函数代码如下: function MessageEx (lText,lCaption:PChar; lStyle:DWord;lIcon:PChar):Integer; var Msg:TMsgBoxParams; begin Msg.cbSize:=Sizeof(Msg); Msg.hwndOwner:=Application.Handle; Msg.hInstance:=hinstance; Msg.lpszText:=lText; Msg.lpszCaption:=lCaption; Msg.dwStyle:=lStyle; Msg.lpszIcon:=lIcon; Msg.dwContextHelpId:=1; Msg.lpfnMsgBoxCallback:=nil; Msg.dwLanguageId:=LANG_NEUTRAL; Result:=MessageBoxIndirect(Msg); end; ---- 要想在消息框中显示自己的图标,先准备一个装有图标的资源文件,加在程序中,如{$R c:\mydir\myres.res},在lStyle参数里除了所需的MB_标志外还要加上MB_USERICON标志,并在最后一个参数里写上资源文件中图标的名字,如果不想使用自定义图标,可将最后一个参数设为nil。函数的其它用法和返回值的处理与Delphi提供的消息框一样。 ---- 强烈建议把自定义函数放在一个单元文件里,并把此文件放在Delphi的搜索路径如Lib下,以后只需要把此单元加在uses语句里,就可以直接使用自定义函数,非常方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值