Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#10

Re: multilingual mit ini datei ?

  Alt 26. Jul 2007, 14:11
Hai bluescreen25,

das "Problem" ist das ein TLabeledEdit ja ein "normales" Edit ist welches einfach noch ein TBoundLabel als "Unterkomponente" erzeugt. Darum geht das mit dem Code nicht. Aber man kann ihn ja erweitern um einfach die Unterkomponenten auch zu berücksichtigen.

Ich habe das mal für die Funktion WriteIni gemacht.

Delphi-Quellcode:
interface

procedure WriteIni(aForm: TForm; aType: TClass; const aProperty: string = 'Text') overload;
procedure WriteIni(aForm: TForm; aType, ASubType: TClass; const aProperty: string = 'Text') overload;

implementation

procedure WriteIni(aForm: TForm; aType: TClass; const aProperty: string = 'Text');
begin
 // Diese bleibt so wie gehabt
end;

// Das ist die überladene Funktion mit der Unterkompo
procedure WriteIni(aForm: TForm; aType, aSubType: TClass; const aProperty: string = 'Text');
var
  CurrentCompo: TComponent;
  SubCompo: TComponent;
  ndx: Integer;
  subndx: Integer;
  TranslateIni: TMemIniFile;
  CurrentText: string;
begin
  TranslateIni := TMemIniFile.Create(apppath + 'default.lng');
  try
    for ndx := 0 to Pred(aForm.ComponentCount) do
    begin
      CurrentCompo := aForm.Components[ndx];
      if (CurrentCompo is aType) then
      begin
        for subndx := 0 to Pred(currentcompo.ComponentCount) do // Hier suche ich die Unterkomponente
        begin
          SubCompo := CurrentCompo.Components[subndx];
          if (SubCompo is aSubType) then
          begin
            CurrentText := MyGetWideStrProp(SubCompo, aProperty);
            TranslateIni.WriteString(aForm.Name + '-' + CurrentCompo.ClassName +
              '-' + SubCompo.ClassName + '-' + aProperty,
              SubCompo.Name, CurrentText);
          end;
        end;
      end;
    end;
    TranslateIni.UpdateFile;
  finally
    TranslateIni.Free;
  end;
end;
Und dann so aufrufen:
Delphi-Quellcode:
  WriteIni(self, TEdit, 'Text');
  WriteIni(self, TLabel, 'Caption');
  WriteIni(self, TButton, 'Caption');
  WriteIni(self, TLabeledEdit,TBoundLabel, 'Caption');
Das musst Du jetzt nur noch für WriteIni umsetzen und dann sollte es gehen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat