So,
bevor ich mir das noch länger ansehen muss hier mal ein kleiner Auszug aus meiner "Form-Übersetzungs-Klasse":
Delphi-Quellcode:
uses
TypInfo, IniFiles;
var
apppath: string;
function MyGetWideStrProp(Instance: TObject; const PropName: String): WideString;
resourcestring
SUnknownProperty = 'Eigenschaft %s existiert nicht.';
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(Instance, PropName);
if PropInfo = nil then
begin
raise EPropertyError.CreateResFmt(@SUnknownProperty, [PropName]);
end;
result := GetWideStrProp(Instance, PropName);
end;
procedure MySetWideStrProp(Instance: TObject; const PropName: String; const Value: WideString);
resourcestring
SUnknownProperty = 'Eigenschaft %s existiert nicht.';
var
PropInfo: PPropInfo;
begin
PropInfo := GetPropInfo(Instance, PropName);
if PropInfo = nil then
begin
raise EPropertyError.CreateResFmt(@SUnknownProperty, [PropName]);
end;
SetWideStrProp(Instance, PropInfo, Value);
end;
procedure WriteIni(aForm: TForm; aType: TClass; const aProperty: string = 'Text');
var
CurrentCompo: TComponent;
ndx: integer;
EditValueIni: TIniFile;
begin
EditValueIni := TIniFile.Create(apppath + 'data.ini');
try
for ndx := 0 to Pred(aForm.ComponentCount) do
begin
CurrentCompo := aForm.Components[ndx];
if (CurrentCompo is aType) then
begin
EditValueIni.WriteString(CurrentCompo.ClassName, CurrentCompo.Name, MyGetWideStrProp(CurrentCompo, aProperty));
end;
end;
finally
EditValueIni.Free;
end;
end;
procedure ReadIni(aForm: TForm; aType: TClass; const aProperty: string = 'Text');
var
CurrentCompo: TComponent;
ndx: integer;
EditValueIni: TIniFile;
newText: string;
begin
EditValueIni := TIniFile.Create(apppath + 'data.ini');
try
for ndx := 0 to Pred(aForm.ComponentCount) do
begin
CurrentCompo := aForm.Components[ndx];
if (CurrentCompo is aType) then
begin
newText := EditValueIni.ReadString(CurrentCompo.ClassName, CurrentCompo.Name, '');
MySetWideStrProp(CurrentCompo,aProperty,newText);
end;
end;
finally
EditValueIni.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
apppath := IncludeTrailingBackslash(ExtractFilePath(ParamStr(0)));
ReadIni(self,TEdit,'Text');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
WriteIni(self,TEdit,'Text');
end;
Was macht der Code?
Ganz einfach, er schreibt alle PropertyValues (Text oder Caption) einer TComponent der Form in eine Ini bzw. liest sie wieder.
Wenn man zusätzlich noch
ReadIni(self,TLabel,'Caption');
bzw.
WriteIni(self,TLabel,'Caption');
im Create / Destroy verwendet würden auch die Captions der Labels gespeichert und geladen werden.
@mindforce:
Normalerweise hätte ich das jetzt nicht gemacht. Du lernst NICHTS wenn Du einfach nur Code aus dem Forum in dein Projekt kopierst.
Ich bitte Dich eindringlich darum dir die Tips welche die User dir geben auch genau zu lesen und zu verstehen versuchen.
Und bitte bleibe etwas freundlicher!
Stephan B.
"Lasst den Gänsen ihre Füßchen"