"Delphi之完全汉语"终结版(已于“家用电脑”37期发表,新瓶旧醋请谅解!)
西安 梁 明
--------------------------------------------------------------------------------
本人在写此段文章前曾有这样一个肮脏的念头:绝对不能把这一招"漏给"别人!但是,良心马上告诉我,绝对不能有如此的想法!于是立刻把她写下来,既算是对上次那篇"Delphi之完全汉语"文章的补充,又算是对自己良心的报答吧!
现在切入正题:大家知道,我们在处理Delphi自身的消息时(我这里指的是包括Delphi系统对话框、异常提示等所有来自Delphi自身的消息),一般采取的办法是"走在Delphi的前面",或是屏蔽掉系统的作用,从而用我们自己的方式处理,以期达到为用户提供纯汉语环境的目的.然而,这一切只能凭借程序员的已有经验来主观预测!由于系统的复杂性以及我们自身的水平所限,这样作的结果难免会顾此失彼,也许随时可能发生的问题都处理得不彻底甚至根本就未处理.试想:在用户使用过程中冒出一些英文的提示,你的程序的"档次"是不是将大打折扣?
因此,我们还必须去寻找更加理想更加彻底的方法,至少,当让程序出现Bug时,普通用户能看懂提示(可不是让你为所欲为与噢).幸好,经过笔者这一阵的反复试验,已经找到另一个万全之策.下面就请听我一一道来(仅限于你的Delphi版本有VCL的源代码--即专业版或企业版):
0.备份Delphi的VCL源代码(所在目录一般为"X:\Program Files\Borland\Delphi4\Source\Vcl").当然,根据需要,仅备份我们需要修改的几个文件也可;
1.在Delphi环境下打开VCL目录下的BdeConst.pas,Consts.pas,BdeConst.pas,DbConsts.pas,midconst.pas,mxConsts.pas,OleConst.pas,WebConst.pas等单元文件,这些单元文件定
义了Delphi用到的常量;
2.把Delphi自己定义的字符串常量"翻译"成我们伟大的母语--汉语;
3."翻译"工作完成后,按原文件名保存;
4.现在就来试试我们的成果,新建一个工程,故意编写一些会出现系统提示的代码,并在编译前,到Delphi的Project Options对话框的Directories/Conditionals页的Search Path选项下,添加搜索路径(也即刚才我们修改常量单元所在的目录),确定后退出;
5.就观看你的英语翻译水平吧!
注意:
①如果你的版本为Delphi 3的话,以上的路径作相应的变化,且Project Options对话框的Directories/Conditionals为Directories;
②对编译条件的该动只对此工程有效,新建工程后需重新设置.如果你希望一劳永逸的话,请随我来:
运行Windows注册表编辑程序Regedit.exe,打开HKEY_CURRENT_USER->Software->Borland->Delphi->4.0->Library,在其中一为"Search path"的串值中加入"$(DELPHI)\Source\VCL".Ok,目的达到!
以下是笔者修改Consts.pas单元文件中函数MessageDlg的常量后用该函数发送的消息.这次,我们看到的再也不是半"英"半阳的消息框了.怎么样,够靓吧?
...
Begin
MessageDlg('感觉如何?'+#13#10#13#10+
'我这里即是把"SMsgDlgInformation"翻译为''消息'';'+#13#10+
'把"SOKButton"翻译为''确定''而得到的结果!',
mtInformation,[mbok],0);
End;
...
****此处插入图4****
上面的动作是不是太老实了一点?!其实,我们完全可以根据自己的意愿来定制这些常量(只要Inprise同意),使其达到一种的特殊效果,比如,我们可以将"SMsgDlgInformation"翻译为你的软件标题或自己的工作室名称等等,如此一来,你的非凡个性将展示无遗!
有关Delphi"完全汉语"方面的经验、技巧笔者就打算介绍这么多(等我手上的这两个程序有交待后我会把这一整套东东放在我的个人主页上,到时请去Down吧).当然,冠以"完全汉语"实令我脸红,但本人多么希望Inprise公司早点结束我们"羡慕"VB程序员的时代!
现在还有一些问题,例如:Delphi的环境是英文的,报表预览的提示及按钮也是英文的等等.对于第一个问题,我个人认为倒没有多大必要,因为没有哪一个程序员连菜单都看不懂的,我们努力的目标是用户;对于第二个问题也有办法解决,在此本不应该涉及此话题,但我在网上看到有很多人在问这个问题,因此也在此略谈一下,作为这个话题的结尾吧:
①按照要求制订好QuickRep的内容;
②仿照QuickRep的预览模式或自己定制QRPreview;
③在QuickRep的OnPreview事件中将QuickRep的QRPrinter赋值给QRPreview的QRPrinter
(如QRPreview1.QRPrinter:=Quickrep1.QRPrinter;)即可让QRPreview取代QuickRep
的预览模式了.
版主:梁明
日期:1999-03-01
E-mail:delphifan@990.net
--------------------------------------------------------------------------------