procedure TfBase.pdReadCaptions(Sender:TControl;Const aHeader:String); var lnComp,i:Integer; Inifile:Tinifile; begin try Inifile:=Tinifile.Create(g_strIniFileName); if Sender=Self then begin Caption:=Inifile.ReadString(aHeader,'Caption',Caption); Font.Size:=s_nFontSize; Font.Name:=s_StrFontName; ParentFont:=false; lst.Add('Caption'); end; // with TControl(Sender) do for lnComp:=0 to ComponentCount-1 do begin if (Components[lnComp] is TCommonDialog) then Continue; //Edit if (Components[lnComp] is TEdit) then begin TEdit(Components[lnComp]).ParentFont:=false; TEdit(Components[lnComp]).Font.Size:=s_nFontSize; TEdit(Components[lnComp]).Font.Name:=s_StrFontName; Continue; end; //DbEdit if (Components[lnComp] is TDbEdit) then begin TDbEdit(Components[lnComp]).ParentFont:=false; TDbEdit(Components[lnComp]).Font.Size:=s_nFontSize; TDbEdit(Components[lnComp]).Font.Name:=s_StrFontName; Continue; end; //Panel if (Components[lnComp] is TPanel) then begin TPanel(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TPanel(Components[lnComp]).Name,''); TPanel(Components[lnComp]).ParentFont :=False; 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]).ParentFont :=False; 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]).ParentFont:=False; 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]).ParentFont :=False; 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]).ParentFont :=False; 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]).ParentFont :=False; 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]).ParentFont :=false; 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]).ParentFont :=False; TLabel(Components[lnComp]).Font.Size:=s_nFontSize; TLabel(Components[lnComp]).Font.Name:=s_StrFontName; Continue; end; //Label if (Components[lnComp] is TMemo ) then begin TMemo(Components[lnComp]).ParentFont :=False; TMemo(Components[lnComp]).Font.Size:=s_nFontSize; TMemo(Components[lnComp]).Font.Name:=s_StrFontName; Continue; end; //Label if (Components[lnComp] is TTreeView ) then begin TTreeView(Components[lnComp]).ParentFont :=False; TTreeView(Components[lnComp]).Font.Size:=s_nFontSize; TTreeView(Components[lnComp]).Font.Name:=s_StrFontName; Continue; end; //Label if (Components[lnComp] is TRichEdit ) then begin TRichEdit(Components[lnComp]).ParentFont :=False; TRichEdit(Components[lnComp]).Font.Size:=s_nFontSize; TRichEdit(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]).ParentFont :=False; 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]).ParentFont :=False; TRadioButton(Components[lnComp]).Font.Size:=s_nFontSize; TRadioButton(Components[lnComp]).Font.Name:=s_StrFontName; Continue; end; if Sender=Self then lst.Add(Components[lnComp].Name); //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))); // end; finally Inifile.Free; end; end;
就是在DLL中的所有Form都继承自一个基类(假设为FBase:TfBase),在TfBase中,写一个方法去读取所有控件的标题信息(信息放在 INi文件中,根据语言需要,选择不同的标题Ini文件)
var
lnComp,i:Integer;
Inifile:Tinifile;
begin
try
Inifile:=Tinifile.Create(g_strIniFileName);
if Sender=Self then
begin
Caption:=Inifile.ReadString(aHeader,'Caption',Caption);
Font.Size:=s_nFontSize;
Font.Name:=s_StrFontName;
ParentFont:=false;
lst.Add('Caption');
end; //
with TControl(Sender) do
for lnComp:=0 to ComponentCount-1 do
begin
if (Components[lnComp] is TCommonDialog) then
Continue; //Edit
if (Components[lnComp] is TEdit) then
begin
TEdit(Components[lnComp]).ParentFont:=false;
TEdit(Components[lnComp]).Font.Size:=s_nFontSize;
TEdit(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//DbEdit
if (Components[lnComp] is TDbEdit) then
begin
TDbEdit(Components[lnComp]).ParentFont:=false;
TDbEdit(Components[lnComp]).Font.Size:=s_nFontSize;
TDbEdit(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end; //Panel
if (Components[lnComp] is TPanel) then
begin
TPanel(Components[lnComp]).Caption:=Inifile.ReadString(aHeader,TPanel(Components[lnComp]).Name,'');
TPanel(Components[lnComp]).ParentFont :=False;
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]).ParentFont :=False;
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]).ParentFont:=False;
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]).ParentFont :=False;
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]).ParentFont :=False;
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]).ParentFont :=False;
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]).ParentFont :=false;
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]).ParentFont :=False;
TLabel(Components[lnComp]).Font.Size:=s_nFontSize;
TLabel(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//Label
if (Components[lnComp] is TMemo ) then
begin
TMemo(Components[lnComp]).ParentFont :=False;
TMemo(Components[lnComp]).Font.Size:=s_nFontSize;
TMemo(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//Label
if (Components[lnComp] is TTreeView ) then
begin
TTreeView(Components[lnComp]).ParentFont :=False;
TTreeView(Components[lnComp]).Font.Size:=s_nFontSize;
TTreeView(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end;
//Label
if (Components[lnComp] is TRichEdit ) then
begin
TRichEdit(Components[lnComp]).ParentFont :=False;
TRichEdit(Components[lnComp]).Font.Size:=s_nFontSize;
TRichEdit(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]).ParentFont :=False;
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]).ParentFont :=False;
TRadioButton(Components[lnComp]).Font.Size:=s_nFontSize;
TRadioButton(Components[lnComp]).Font.Name:=s_StrFontName;
Continue;
end; if Sender=Self then
lst.Add(Components[lnComp].Name); //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)));
//
end;
finally
Inifile.Free;
end;
end;
如果使用了,DBGRIDEH,ListView等列表类型的控件怎么处理呢================================================
加入对这两个类的判断
RTTI方法资料看看,你可以编历窗体上的所有控件的查找是不是有
Caption属性. 用函数 GetPropInfo(Instance: TObject; const PropName: string; AKinds: TTypeKinds): PPropInfo;例如我要得到一个btn的是不是有Caption属性;
var
PropInfo:PPropInfo;
begin
PropInfo:=GetPropInfo(btn1,'Caption',tkProperties);
if PropInfo=nil then
ShowMessage('Not found')
else
ShowMessage('Found'); 如果要得到btn1的属性
ShowMessage(GetPropValue(btn1,'Caption')); 如果要设定btn1的属性
SetPropValue(btn2,'Caption','Hello Delphi');不知道这是不是很优化.另外你还可以用第三方控件 DevExpress cxPropertiesStore.