在Delphi下,如何使ShowMessage中的按钮中文化

如果你使用messagedlg(对showmessage也适用)可以汉化定义按钮caption的常量,具体操作步骤如下:

1.   打开文件consts.pas(在Delphi安装目录的/source/vcl下)    

 
   
 2.    将以下资源字符串常量的值进行改动:     
 
 
      SMsgDlgWarning   =   '警告';   
 
      SMsgDlgError   =   '错误';   
 
      SMsgDlgInformation   =   '信息';   
 
      SMsgDlgConfirm   =   '确认';   
 
      SMsgDlgYes   =   '(&Y)是';   
 
      SMsgDlgNo   =   '(&N)否';   
 
      SMsgDlgOK   =   '确定';   
 
      SMsgDlgCancel   =   '放弃';   
 
      SMsgDlgHelp   =   '(&H)帮助';   
 
      SMsgDlgHelpNone   =   '无效的帮助';   
 
      SMsgDlgHelpHelp   =   '帮助';   
 
      SMsgDlgAbort   =   '(&A)放弃';   
 
      SMsgDlgRetry   =   '(&R)重试';   
 
      SMsgDlgIgnore   =   '(&I)忽略';   
 
      SMsgDlgAll   =   '(&A)全部';   
 
      SMsgDlgNoToAll   =   '(&o)全不';   
 
      SMsgDlgYesToAll   =   '(&A)全是';   
 
 ----    经过这样改动后,对应按钮的热键仍然可以使用。     
 3.打开文件dialogs.pas(在Delphi安装目录的/source/vcl下)   
 
 4.查到ButtonCaptions:   
          把    ButtonCaptions:   array[TMsgDlgBtn]   of   Pointer   =   (  
          @SMsgDlgYes,   @SMsgDlgNo,   @SMsgDlgOK,   @SMsgDlgCancel,  
          @SMsgDlgAbort,@SMsgDlgRetry,   @SMsgDlgIgnore,   @SMsgDlgAll,    
          @SMsgDlgNoToAll,   @SMsgDlgYesToAll,     @SMsgDlgHelp);  
      改为   
          ButtonCaptions:   array[TMsgDlgBtn]   of   string   =   (  
          '是',    '否',    '确定',    '取消',    '退出','重试',    '跳过',     
          '所有',    '全不',    'YesToAll',   '帮助');   
      把    LoadResString(ButtonCaptions[B])   改为ButtonCaptions[B]   
 (注意共有二处,因为上面已经将指针类型改为String,所以这里直接用ButtonCaptions[B]  
    5.   修改后编译生成dialog.dcu、consts.dcu文件。(如何编译请参照本博客delphi技巧13)   
   6.           将dialog.dcu、consts.dcu文件拷贝到../delphi6/lib目录下。
posted on 2014-02-05 20:45  向北方 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/China3S/p/3538414.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
应用程序在运行当经常要输出各种即时信息,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、付费专栏及课程。

余额充值