学了两年多Delphi,到现在为止也未完全摆脱只会拉拉控件的境地唉。。不过还是要感谢这里所有帮助过我的朋友,和热爱Delphi的朋友,送大家一个我自己做的一些小东东,主要参考了TinyDB自带的DBDesktop。希望对大家有用http://www.csdn.net/cnshare/soft/16/16425.shtm说明
====
    这是一套使你的程序支持多国语言的vcl类,你只要从该组件中的TLangForm继承出你的Form类就可以轻易的使程序在启动时自动加载外部语言文件,并可以在运行时提供给用户改变语言设置的功能。使用方法
=======
将TLangMgr,TLangFrm两个文件复制到你的程序目录下,并将TLangFrm添加到你的工程下,在窗口类的interface下的uses中加入LangFrm,然后将TForm1=class(TForm)(或类似语句)改为TForm1=class(TLangForm),然后就可以重新编译程序了。

外部语言文件请使用工程默认名字,文件扩展名为语言的名称缩写,如Project.eng,Project.chs等。文件为标准的ini文件,每个窗口的语言每个语言文件必须有一个名为[General]的标准Section,Language表示该语言的英文名称,Charset表示语言的字符集数字代码,中文134,日文128,其它语言可以查看MSDN得到它的代码,Font为使用字体(为了使Font应用到每一个控件,必须将所有控件的ParentFont属性设为True,否则字体不会应用到该控件上),FontSize表示字体大小。后面的若干Section以窗口类名为依据分组,窗口内的控件就用控件名表示,然后用‘.’加属性名称的方法来表示具体属性内容,(如Label1.Caption=Label),现在支持的属性为Caption和Hint。

另外,对于显示Message等功能,可以直接在窗口中使用函数Translate('symbol','default string')来实现,对要使用的文字定一个略称,并写一段默认文字,以备读取语言配置文件出错时使用。

对于部分控件标题,如TListView.Column和TGrid.Column,程序无法自动识别,(本来可以直接加到基类的,但是这样程序编译时不管用不用到,都会加载这些模块,所以还是放到外部来实现吧),自己实现的方法就是覆盖(override)TLangForm中的DoChangeLanguage()函数,并在其中使用Translate()函数来手工设置它们的这些属性。

注意,由于Delphi的VCL本身不是Unicode的,所以该组件也没有实现unicode,比如,你无法在日文操作系统下正确的输入中文文字到程序中,中文界面的配置文件加载后,也只会显示乱码而已,如果你需要程序有Unicode的支持,请使用其它第三方Unicode VCL,你可以参照TLangForm的方法来写一个自己的Form类出来。你可以到“UnicodeVersion”目录下找到一个我使用TntUnicode组件改制的多国语言窗口类,使用前请先安装TntUnicode VCL,另外,在使用它的时候需要注意一些地方,比如语言(ini)文件中存放的不再是语言文字的本地码,而是经过转换后的unicode码的码值,你可以使用“UnicodeConveter”目录下的工具来将文字转换为该码值。另外,目前我写的这个类比较简单,没有判断窗口内的组件是否是Tnt组件库中的组件,如果你使用了不属于这个组件库的组件,程序可能会出错,还有TTntMuneItem中的属性设置被我跳过了,它老是出错,你可以在自己的佛人民中用继承DoChangeLanguage()函数的方法实现菜单文字的更新,当然,需要手工写更新代码了。。

所有程序代码,在Delphi6,7下测试通过。

任何意见,或改进,请联系:
[email protected]
tony