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"