我这边有一套成熟的方案,用了很久
1.定义一个全系统的基类Form(如果有的话,就在你的基类form中写)
2.将需要读取的标题信息都防到ini中(每一种语言一种ini)
3.procedure TfBase.pdReadCaptions(Sender:TControl;Const aHeader:String);
var
lnComp,i:Integer;
Inifile:Tinifile;
begin
try
Inifile:=Tinifile.Create(g_StrFileName);
if Sender=Self then
begin
Caption:=Inifile.ReadString(aHeader,'Caption',Caption);
Font.Size:=s_nFontSize;
Font.Name:=s_StrFontName;
ParentFont:=True;
end;
//
with TControl(Sender) do
for lnComp:=0 to ComponentCount-1 do
begin
if (Components[lnComp] is TCommonDialog) then
Continue;
//Panel
if (Components[lnComp] is TPanel) then
begin
TPanel(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TPanel(Components[lnComp]).Name,'');
TPanel(Components[lnComp]).Font.Size:=s_nFontSize;
TPanel(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//DbCheckBox
if (Components[lnComp] is TDbCheckBox) then
begin
TDbCheckBox(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TDbCheckBox(Components[lnComp]).Name,'');
TDbCheckBox(Components[lnComp]).Font.Size:=s_nFontSize;
TDbCheckBox(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//Button
if (Components[lnComp] is TButton) then
begin
TButton(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TButton(Components[lnComp]).Font.Size:=s_nFontSize;
TButton(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//CheckBox
if (Components[lnComp] is TCheckBox) then
begin
TCheckBox(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TCheckBox(Components[lnComp]).Font.Size:=s_nFontSize;
TCheckBox(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//GroupBox
if (Components[lnComp] is TGroupBox) then
begin
TGroupBox(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TGroupBox(Components[lnComp]).Font.Size:=s_nFontSize;
TGroupBox(Components[lnComp]).Font.Name:=s_StrFontName;
continue;
end;
//RadioButton
if (Components[lnComp] is TRadioGroup) then
begin
TRadioGroup(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
Continue;
end;
//SpeedButton
if (Components[lnComp] is TSpeedButton) then
begin
TSpeedButton(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TSpeedButton(Components[lnComp]).Font.Size:=s_nFontSize;
TSpeedButton(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//StaticText
if (Components[lnComp] is TStaticText) then
begin
TStaticText(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TStaticText(Components[lnComp]).Font.Size:=s_nFontSize;
TStaticText(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//LabeledEdit
if (Components[lnComp] is TLabeledEdit ) then
begin
TLabeledEdit(Components[lnComp]).EditLabel.Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
Continue;
end;
//MenuItem
if (Components[lnComp] is TMenuItem) then
begin
TMenuItem(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
Continue;
end;
//Label
if (Components[lnComp] is TLabel ) then
begin
TLabel(Components[lnComp]).Caption:=inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TLabel(Components[lnComp]).Font.Size:=s_nFontSize;
TLabel(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//TabSheet
if (Components[lnComp] is TTabSheet) then
begin
TTabSheet(Components[lnComp]).Caption:=inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TTabSheet(Components[lnComp]).Font.Size:=s_nFontSize;
TTabSheet(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//RadioButton
if (Components[lnComp] is TRadioButton) then
begin
TRadioButton(Components[lnComp]).Caption:=inifile.ReadString(aHeader,TControl(Components[lnComp]).Name,'');
TRadioButton(Components[lnComp]).Font.Size:=s_nFontSize;
TRadioButton(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//Frame 框架里的东西
if (Components[lnComp]) is TFrame then
for i:=0 to TFrame(Components[lnComp]).ComponentCount-1 do
pdReadCaptions(TFrame(Components[lnComp]),Copy(TFrame(Components[lnComp]).ClassName,2,length(TFrame(Components[lnComp]).ClassName)));
//