![]() |
|
||||||||||||||
| | 网站首页 | 技术教程 | 网站开发 | 程序下载 | 言情小说 | 法律咨询 | Firefox | 两性故事 | 健康知识 | 网络游戏 | 免费论文 | | ||
|
||
|
|||||
| DELPHI:利用INI文件实现界面无闪烁多语言切换 | |||||
|
熊斌 landragon@tom.com 一、引言 越来越多的程序使用了多国语言切换,虽然DELPHI自带多语言包的添加和配置,但是那种方法在切换语言时界面会出现闪烁,而且实现起来很麻烦,这里我介绍给大家的是利用INI文件来读取界面的语种文字,用这种方法,不但简单易行,而且在切换的时候不会出现界面的闪烁。 二、InI文件格式说明 1、语种定义 [Language] //语言 DefaultLang = ChineseGB //界面的默认语种(InI文件名,不带扩展名) Language = 语种 //菜单标题 ChineseGB = 简体中文 //相应语种文件名 ChineseBig = 繁体中文 English = 英文 ⑴ 如果DefaultLang项没有设置,则为语种目录中所寻找到的InI的第一个文件,做为当前界面语种,所有Ini文件都要设置成一样; ⑵ Language为菜单界面上所显示的标题,不设置时,默认为‘Language’; ⑶ 如果Language以下项没有设置,则相应语种的菜单标题为文件名(不带扩展名)。 2、窗体界面定义 [FormName] //需要变换的窗口 .Caption = 演示窗体 //本窗口的属性,表示为:[窗口名].属性名 = 语言 Button1.Hint = 按钮说明 //控件的属性,表示为:控件名.属性名 = 语言 ComboBox1.Items = 简体中文||英文 //其中“||”为分隔符 注:⑴ 在InI文件中每行“//”开始的说明文字不要输入; ⑵ 对继承自TStrings的属性,其各个项目之间需用“||”分隔; ⑶ 设计思想来源于KeyZhang所编写的《多语言切换函数 For Delphi》组件。 三、实现原理 RTTI的基本设计思想是在运行时访问给定数据类型的信息,该类型可以是类也可以是简单的Pascal数据类型(int、string、char等)。本文便是通过RTTI在运行期,获取组件的相应属性,并进行动态设置,达到多语言切换功能。 利用INI文件实现界面无闪烁多语言切换 四、各个函数的定义及实现 1、程序运行时,我们查找语种目录下所有的语言配置文件(*.ini),为了达到这个目的,我编写了如下的函数搜索目录下所有的语言配置文件的文件名,然后将文件名去掉ini扩展名保存返回: procedure SearchLanguagePack (lngStrings: TStrings); var DosError: Integer; SearchRec: TsearchRec; begin DosError := FindFirst (ExtractFilePath (ParamStr (0)) + 'Language\*.ini', faAnyFile, SearchRec); while DosError = 0 do begin { 返回的文件名并去掉末尾的.ini字符 } lngStrings.Add (ChangeFileExt (SearchRec.Name, '')); DosError := FindNext (SearchRec); end; FindClose(SearchRec); end; 2、实现界面的多语言切换函数: function ChangeLanguage (Form: TForm; Lngfile: string): Boolean; var INIF: TIniFile; //InI文件 SL: TStringList; // InI文件中读出的相应窗体的信息 TmpSL: TStringList; //将每一行信息,以“=”分隔的信息 Key: string; //“=”左边的信息 Value: string; //“=”右边的信息 CompName: string; //组件名 CompProp: string; //组件属性名 I: Integer; AComponent: TComponent; //相应组件
var P, L, C: Integer; begin R.Clear; L := Length (S); //确定分隔符的长度,以便删除字符串中的相应字符 C := Length (SplitChar); //循环分隔字符串 repeat P := Pos (SplitChar, S); //如果在字符串中没有找到分隔符,说明为最后一个 if P = 0 then C := 1; R.Add (Copy (S, P+C, L)); Delete(S, P, L); until P = 0; end;
procedure SetPropertyValue (AComponent: TComponent; sProperty, sValue: string); var |
|||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 巧用日期转换函数验证用户输… 在Delphi 7 中用Indy开发Soc… 在Delphi中用ADSI创建IIS的虚… 在DELPHI程序中拨号上网 在Delphi中侦测剪贴板的变化 用Delphi 开发数据库程序经验… Delphi实现远程屏幕抓取 改变VCL的行为--一个使用可视… 怎样用delphi制作一个IPhunt… TWebBrowserTWebBrowser与MS… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 网站地图 | Baidu News | Google Map | | |||
|