在一些软件中,我们经常会看到界面语言切换功能,不过程序需要的这些各国语言信息都封装在DLL中,有的也存储在INI文件中,下面我就向大家介绍一个小技巧,在DELPHI中不需要任何DLL文件和INI文件,就可以实现此功能。
首先新建一工程,然后在窗体FORM1中加入一些控件,在这里我假设加入了如下控件:三个TBUTTON按钮,两个TCHECKBOX,一个TGROUPBOX和一个菜单。
然后把他们的CAPTION属性改为中文信息,再将对应的英文信息放在这些控件的HINT属性中,信息如下:
控件名称 |
CAPTION属性值 |
HINT属性值 |
Button1 |
中文 |
Chinese |
Button2 |
英文 |
English |
Button3 |
忽略 |
Ignore |
CheckBox1 |
一般 |
General |
CheckBox2 |
高级 |
Advanced |
GroupBox1 |
信息 |
Information |
PopupMenu1 |
|
|
N1 |
当前日期 |
Current Date |
N2 |
帮助 |
Help |
N3 |
关于 |
About |
N4 |
退出 |
Exit |
最后将Button1的TAG属性改为1,Button2的TAG属性改为2,双击FORM1,BUTTON1和BUTTON2,编写代码如下:
procedure TForm1.FormCreate(Sender : Tobject); begin //初始化,显示中文界面 Button1.Enabled := False; Button2.Enabled :=True end;
procedure TForm1.ChangeState(Mode : Byte); //改变按钮状态 begin if Mode = 1 then //如果是显示中文,则Button1失效,Button2有效 begin Button1.Enabled := False; Button2.Enabled := True; End Else Begin Button1.Enabled := True; Button2.Enabled := False; End; end;
procedure TForm1.Button1Click(Sender: TObject); var i:Integer; CS : String; Begin ChangeState(Tbutton(Sender).Tag); for i:=0 to ComponentCount-1 do begin //将窗体中的菜单项的中/英文进行切换 if Components[i] is TMenuItem then begin CS := TMenuItem(Components[i]).Hint ; TMenuItem(Components[i]).Hint:= TMenuItem(Components[i]).Caption ; TMenuItem(Components[i]).Caption := CS ; end; //将窗体中的按钮的中/英文进行切换 if Components[i] is TButton then begin CS := TButton(Components[i]).Hint ; TButton(Components[i]).Hint := TButton(Components[i]).Caption ; TButton(Components[i]).Caption := CS ; end; //将窗体中的复选框的中/英文进行切换 if Components[i] is TCheckBox then begin CS:=TCheckBox(Components[i]).Hint ; TCheckBox(Components[i]).Hint:=TCheckBox(Components[i]).Caption ; TCheckBox(Components[i]).Caption := CS ; end; //将窗体中的组合框的中/英文进行切换 if Components[i] is TGroupBox then begin CS:=TGroupBox(Components[i]).Hint ; TGroupBox(Components[i]).Hint:=TGroupBox(Components[i]).Caption ; TGroupBox(Components[i]).Caption := CS ; end; end; end; |
最后再将Button2的ONCLICK事件指向Button1的ONCLICK事件,按F9,运行一下,看看效果,切换的速度也非常快,有兴趣的朋友可以试试。
查看本文来源