delphi 控件的汉化

2016-08-22 10:17:46来源:http://447118.blog.51cto.com/437118/269690作者:4030127人点击


  一、汉化的方法
  在delphi的子目录下有这么两个目录:(1)/lib:代表delphi的库文件目录;(2)/source:在这个目录下可以找到几乎所有delphi可视控件和非可视控件的源代码,对于我们了解和修改delphi中的控件有很大的作用。
  在delphi中提示信息所在的源文件和其作用见下表。
路 径 文 件 与delphi中出现的提示关系 source/vcl bdeconst.pas bde提示信息 source/vcl consts.pas 常用对话框和delphiide中使用的提示信息等 source/vcl dbconsts.pas 和数据库操作相关的提示信息。 source/vcl midconst.pas 与多层应用程序有关的提示信息 source/vcl mxconsts.pas 与decisioncube有关的提示信息 source/vcl oleconst.pas ole提示 source/vcl webconst.pas web提示 source/rtl/corba corbcnst.pas corba提示 source/rtl/sys comconst.pas com提示 source/rtl/sys sysconst.pas 系统函数提示
  并且所有这些提示信息前面都包含resourcestring字符串。
  既然inprise提供了delphi中常用可视控件和非可视控件的源代码,也就为汉化提供了便利。我们只需要把其中的英文提示修改为汉语提示即可。
  比如:messagedlg的汉化。这是一个常用的提示对话框。我们经常是这样使用的:
  if messagedlg(′你确实希望退出本系统吗?′,mtconfirmation, [mbyes, mbno],
  0) = mryes then
  begin
   close;
  end;
  要汉化这个对话框中的提示信息,我们只需把/source/vcl/consts.pas打开,将:
  smsgdlgconfirm = ′confirm′;
  smsgdlgyes = ′&yes′;
  smsgdlgno = ′&no′;
  修改为:
  smsgdlgconfirm =′确认′;
  smsgdlgyes =′是′;
  smsgdlgno =′否′;(运行结果见图1)
  二、delphi如何进行编译
  实际上,按上面的汉化步骤编译运行程序,我们并不能得到图1所示的效果。为什么呢?这是与delphi编译的先后顺序有关。
  选择delphi 4 |tools|enviroment options,打开enviroment options对话框,选择library页。在directories下的library path选项中选择最右端的小圆点按纽,在directories对话框中的ordered list of library paths列表框中,我们一般可以发现以下的内容:
  $(delphi)/lib
  $(delphi)/bin
  $(delphi)/imports
  这个列表框中的内容正是反映了delphi编译顺序。
  举例来说,如果我们在一个unit1单元中调用了messagedlg方法,而这个方法是在dialogs单元中提供的,因此我们必须在unit1单元中的uses语句中增加代码:uses dialogs;
  delphi才能够正确地编译这个单元。按照我们刚才所介绍的,delphi在编译的时候,先在安装delphi 4下的/lib查找dialogs.dcu,如果找到了,delphi就认为这个dialogs就是所需的库文件;如果没有找到,则继续在/bin/imports中查找,直到找到为止。但如果在同一目录下既存在库文件(.dcu文件)又存在源文件(.pas文件),则delphi会自动比较它们版本的新旧,然后使用新版本进行编译。如果在所有列表框下的目录中都找不到所需的单元库文件或者源文件,delphi就会提示“undeclared identifier:′***′ ”编译错误。
  三、改变delphi的编译顺序
  在directories对话框中,delphi甚至提供了让我们改变编译的查找顺序、增添或者删除的功能。
  (1)改变编译的查找先后顺序
  在ordered list of library paths列表框中任意选择一项,按动右端的上下箭头改变先后顺序。
  (2)增添一个可选择编译的目录
  在ordered list of library path列表框下输入以下的内容c:/mydelphi/lib,然后选择add,在ordered list of library path列表框下输入以下的内容c:/mydelphi/source,然后选择add,并且使用上下箭头把c:/mydelphi/lib放到列表框的第一项,把c:/mydelphi/source放到列表框的第二项。
  (3)删除一个可选的目录
  在ordered list of library paths列表框中任意选择一项,选择delete进行删除。
  四、具体实现过程
  还是以汉化messagedlg为例来说明。
  (1)在资源管理器中新建一个目录c:/mydelphi/source
  (2)打开delphi目录下的/source/vcl/consts.pas
  (3)选择file|save as,把consts.pas保存到c:/mydelphi/source
  (4)打开c:/mydelphi/source下的consts.pas
  (5)按照(一)中类似的方法汉化consts.pas
  (6)类似于(三),改变delphi的编译顺序
  (7)新建一个工程文件,在buttuon1的onclick下加入以下的代码
  procedure tform1.button1click(sender: tobject);
  begin
   if messagedlg(′你确实希望退出本系统吗?′,mtconfirmation, [mbyes,mbno], 0) = mryes then
   close;
  end;
  选择project|build all projects,就可以看到图1所示的效果。
  图1
  五、把编译出来的dcu作为新的delphi库文件
  编译运行后,我们可以在c:/mydelphi/source目录下面发现consts.dcu文件,这个文件就是最新的汉化以后的consts库文件,当然与delphi本身一样,我们即可以提供汉化以后的源代码,也提供汉化以后的库文件。具体做法是:
  (1)创建一个新的目录,c:/mydelphi/lib
  (2)把consts.dcu文件移动到新创建的目录中
  (3)因为我们在第(三)步改变和创建新的编译目录的时候,已经设置了汉化以后的delphi编译顺序。到这一步为止,我们就实现了即提供汉化版本的库文件(c:/mydelphi/lib/consts.dcu),也提供了汉化版本的源文件(c:/mydelphi/source/consts.pas)。
  (4)可以把这个consts.dcu分发给其他人一起享受您的最新成果了。不过:在让他们可以使用您的成果前,一定要首先在他们的delphi上从事类似于第(三)步的工作,改变他们所使用delphi的编译顺序。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台