六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

使用INI文件完成界面無閃爍多語言切換

[摘要]程序運(yùn)行時,我們查找當(dāng)前目錄下所有的語言配置文件(*.ini),為了達(dá)到這個目的,我編寫了如下的函數(shù)搜索目錄下所有的語言配置文件的文件名,然后將文件名去掉ini擴(kuò)展名保存返回: function T...
程序運(yùn)行時,我們查找當(dāng)前目錄下所有的語言配置文件(*.ini),為了達(dá)到這個目的,我編寫了如下的函數(shù)搜索目錄下所有的語言配置文件的文件名,然后將文件名去掉ini擴(kuò)展名保存返回:
function TForm1.SearchLanguagePack:TStrings;
var
ResultStrings:TStrings;
DosError:integer;
SearchRec:TsearchRec;
begin
ResultStrings:=TStringList.Create;
DosError:=FindFirst(ExtractFilePath(ParamStr(0))+'*.ini', faAnyFile, SearchRec);
while DosError=0 do
begin
{ 返回的文件名并去掉末尾的.ini字符 }
ResultStrings.Add(ChangeFileExt(SearchRec.Name,''));
DosError:=FindNext(SearchRec);
end;
FindClose(SearchRec);
Result:=ResultStrings;
end;

在Form建立的事件中添加代碼,將目錄下所有的語言文件名加入選擇列表框中。
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items.AddStrings(SearchLanguagePack);
end;

程序的重點(diǎn)在如何切換語言,在ComboBox1的OnChange事件中進(jìn)行切換操作。
這里我寫了SetActiveLanguage過程用于實(shí)現(xiàn)這一操作。
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
SetActiveLanguage(ComboBox1.Text);
end;
其中SetActiveLanguage代碼如下:
procedure TForm1.SetActiveLanguage(LanguageName:string);
const
Translations='Translations';
Messages='Messages';
var
frmComponent:TComponent;
i:Integer;
begin
with TInifile.Create(ExtractFilePath(ParamStr(0))+LanguageName+'.ini') do
begin
for i:=0 to ComponentCount-1 do { 遍歷Form組件 }
begin
frmComponent:=Components[i];
if frmComponent is TLabel then { 如果組件為TLabel型則當(dāng)作TLabel處理,以下同 }
begin
(frmComponent as TLabel).Caption:=
ReadString(Translations,frmComponent.Name
+'.Caption',(frmComponent as TLabel).Caption);
end;
if frmComponent is TCheckBox then
begin
(frmComponent as TCheckBox).Caption:=
ReadString(Translations,frmComponent.Name
+'.Caption',(frmComponent as TCheckBox).Caption);
end;
if frmComponent is TButton then
begin
(frmComponent as TButton).Caption:=
ReadString(Translations,frmComponent.Name
+'.Caption',(frmComponent as TButton).Caption);
(frmComponent as TButton).Hint:=
ReadString(Translations,frmComponent.Name
+'.Hint',(frmComponent as TButton).Hint);
end;
if frmComponent is TMenuItem then
begin
(frmComponent as TMenuItem).Caption:=
ReadString(Translations,frmComponent.Name
+'.Caption',(frmComponent as TMenuItem).Caption);
end;
end;
M1:=ReadString(Messages,'M1',M1);
end;
end;
在這個過程中,我們遍歷了Form中的所有組件,根據(jù)他們的類別和組件名動態(tài)的從ini配置文件中讀出應(yīng)該顯示的語言文字。


用遍歷組件的方法比一個一個寫出具體的組件維護(hù)起來要方便很多,代碼的適應(yīng)性也更強(qiáng)。
其中M1為一個字符串變量,這樣提示消息也能切換,比如在Button1的Click事件中
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(M1);
end;
就可以根據(jù)不同的語言給出不同的提示文字。

好了,整個工程就做完了,你可以運(yùn)行測試一下,是不是切換迅速而且無閃爍。


主站蜘蛛池模板: 人人插人人爽 | 在线观看亚洲欧美 | 午夜网站免费版在线观看 | 最近最新中文字幕1页 | 天天躁日日躁成人字幕aⅴ 天天躁日日躁 疯人影院 | 婷婷九月色| 手机看片日韩日韩国产在线看 | 欧美一区二区三区东南亚 | 人人舔人人爱 | 色涩在线观看 | 青草视频在线观看免费资源 | 星辰影院在线 | 亚洲欧美91 | 色网站观看 | 亚洲伊人成综合人影院小说 | 午夜影院在线免费观看 | 亚洲性色视频 | 亚洲最大成人综合网 | 亚洲精品国产v片在线观看 亚洲精品高清在线观看 | 小视频在线观看免费播放 | 亚洲精品在线播放视频 | 一级黄色片免费的 | 亚洲94vvv男人的天堂五月 | 日本高清免费在线视频 | 中文伊人| 在线观看视频一区二区三区 | 性a视频 | 日本一区视频 | 青娱乐在线视频观看 | 亚洲成a人片在线观 | 伊人精品影院 | 色综合狠狠操 | 先锋影音va中文资源 | 污免费视频 | 午夜啪啪免费视频 | 欧美资源在线观看 | 婷婷丁香激情 | 日本护士后进式猛烈动态图片 | 中文字幕1区 | 色噜噜狠狠色综合免费视频 | 亚洲免费精品 |