就是在原system菜单上加一个language:English,Italy,French...的菜单,当点击english,界面就显示english,其他的相同,请问如何设计?

解决方案 »

  1.   

    我这边有一套成熟的方案,用了很久
    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)));
          //
        end;
      finally
        Inifile.Free;
      end;
    end;
      

  2.   

    To:wycg_cnh20(伤心郁闷中) 
       悄悄的问你个问题,全系统的基类应该怎么定义啊
      

  3.   

    就是你的整个工程中的form都继承自它。
    这样的话,你可能没一个Form的申明部门都要改动
    TYourForm=Class(TForm)====>>>> TYourForm=Class(TBaseForm)你给我一个邮箱,Ok
      

  4.   

    DELPHI里有个多语言DLL,在工程向导里有
      

  5.   

    看看这套元件
    www.acroprise.com.tw
    把元件放到主画面,不用修改你别的form的代码,就可以增加任意语言支持了。