熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

利用INI文件實現界面無閃爍多語言切換

2013-11-23 17:46:51  來源: Delphi編程 

  程序運行時我們查找當前目錄下所有的語言配置文件(*ini)為了達到這個目的我編寫了如下的函數搜索目錄下所有的語言配置文件的文件名然後將文件名去掉ini擴展名保存返回

function TFormSearchLanguagePack:TStrings;
var
ResultStrings:TStrings;
DosError:integer;
SearchRec:TsearchRec;
begin
ResultStrings:=TStringListCreate;
DosError:=FindFirst(ExtractFilePath(ParamStr())+*ini faAnyFile SearchRec);
while DosError= do
begin
{ 返回的文件名並去掉末尾的ini字符 }
ResultStringsAdd(ChangeFileExt(SearchRecName));
DosError:=FindNext(SearchRec);
end;
FindClose(SearchRec);
Result:=ResultStrings;
end;

  在Form建立的事件中添加代碼將目錄下所有的語言文件名加入選擇列表框中


procedure TFormFormCreate(Sender: TObject);
begin
ComboBoxItemsAddStrings(SearchLanguagePack);
end;

  程序的重點在如何切換語言在ComboBox的OnChange事件中進行切換操作

  這裡我寫了SetActiveLanguage過程用於實現這一操作

procedure TFormComboBoxChange(Sender: TObject);
begin
SetActiveLanguage(ComboBoxText);
end;

  其中SetActiveLanguage代碼如下

procedure TFormSetActiveLanguage(LanguageName:string);
const
Translations=Translations;
Messages=Messages;
var
frmComponent:TComponent;
i:Integer;
begin
with TInifileCreate(ExtractFilePath(ParamStr())+LanguageName+ini) do
begin
for i:= to ComponentCount do { 遍歷Form組件 }
begin
frmComponent:=Components[i];
if frmComponent is TLabel then { 如果組件為TLabel型則當作TLabel處理以下同 }
begin
(frmComponent as TLabel)Caption:=
ReadString(TranslationsfrmComponentName
+Caption(frmComponent as TLabel)Caption);
end;
if frmComponent is TCheckBox then
begin
(frmComponent as TCheckBox)Caption:=
ReadString(TranslationsfrmComponentName
+Caption(frmComponent as TCheckBox)Caption);
end;
if frmComponent is TButton then
begin
(frmComponent as TButton)Caption:=
ReadString(TranslationsfrmComponentName
+Caption(frmComponent as TButton)Caption);
(frmComponent as TButton)Hint:=
ReadString(TranslationsfrmComponentName
+Hint(frmComponent as TButton)Hint);
end;
if frmComponent is TMenuItem then
begin
(frmComponent as TMenuItem)Caption:=
ReadString(TranslationsfrmComponentName
+Caption(frmComponent as TMenuItem)Caption);
end;
end;
M:=ReadString(MessagesMM);
end;
end;

  在這個過程中我們遍歷了Form中的所有組件根據他們的類別和組件名動態的從ini配置文件中讀出應該顯示的語言文字

  用遍歷組件的方法比一個一個寫出具體的組件維護起來要方便很多代碼的適應性也更強

  其中M為一個字符串變量這樣提示消息也能切換比如在Button的Click事件中

procedure TFormButtonClick(Sender: TObject);
begin
ShowMessage(M);
end;

  就可以根據不同的語言給出不同的提示文字

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


From:http://tw.wingwit.com/Article/program/Delphi/201311/25068.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.