网站公告列表

  没有公告

加入收藏
设为首页
联系站长
您现在的位置: ASP学习资源 >> 网站开发 >> Delphi教程 >> 文章正文
  DELPHI:利用INI文件实现界面无闪烁多语言切换            【字体:
DELPHI:利用INI文件实现界面无闪烁多语言切换
      
利用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文件实现界面无闪烁多语言切换
 
熊斌 landragon@tom.com

四、各个函数的定义及实现

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; //相应组件


procedure Split (S: string; SplitChar: string; R: TStrings); //将字符串分隔

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

[1] [2] [3] 下一页

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    巧用日期转换函数验证用户输…
    在Delphi 7 中用Indy开发Soc…
    在Delphi中用ADSI创建IIS的虚…
    在DELPHI程序中拨号上网
    在Delphi中侦测剪贴板的变化
    用Delphi 开发数据库程序经验…
    Delphi实现远程屏幕抓取
    改变VCL的行为--一个使用可视…
    怎样用delphi制作一个IPhunt…
    TWebBrowserTWebBrowser与MS…
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    企业专区
    司法考试
    经济论文
    国内资讯
    两性知识
    健康知识
    现代文学
     
    行业资讯
    案例判例
    教育论文
    国外资讯
    性爱技巧
    保健养生
    网络文学
     
    行销知识
    理论研究
    社会论文
    游戏策划
    两性生理
    两性健康
    古典文学
     
    行销实战
    司法解释
    财税论文
    程序教程
    两性心理
    心理健康
    武侠言情
     
    行销资源
    样本范本
    证券论文
    美术教程
    孕育知识
    心理测试
    科幻小说
     
    网络广告
    法规大全
    医学论文
    手机游戏
    两性误区
    家庭医生
    侦探恐怖
     
    电信产业
    法律论文
    管理论文
    移动平台
    两性故事
    老年保健
    纪实文学
     
    投资信息
    法律咨询
    会计论文
    项目管理
    性情男女
    性格测试
    少儿文学
     
    传播论坛
    法律援助
    实用文书
    市场运营
    成人笑话
    性爱测试
    星座知识
    Copyright © 2005-2008 asp.u258.net All rights reserved.
    本站资源部分来自互联网如有侵犯你的权益请与我们联系