Nutze seit Jahren dashier
http://torry.net/vcl/forms/savers/rg.zip (bzw. eine von mir angepasste Form).
Auf der Seite
http://torry.net/pages.php?id=96 gibt es noch ein paar Sachen, die sich mit der Aufgabenstellung befassen.
Hab' das Original von weiter oben mal angepasst.
Delphi-Quellcode:
procedure THauptfenster_Uebung.OnCreate(Sender: TObject);
var ini:TIniFile;
Filename, formname:string;
begin
filename := 'E:\Projekte\Uebung\TestIni.Ini';
ini := TInifile.create(filename);
Width:= ini.ReadInteger(Name, 'Width', 0);
Height:= ini.ReadInteger(Name, 'Height', 0);
Left:= ini.ReadInteger(Name, 'Left', 0);
Top:= ini.ReadInteger(Name, 'Top', 0);
end;
procedure THauptfenster_Uebung.OnDestroy(Sender: TObject);
var ini:TIniFile;
Filename:string;
begin
ini := TInifile.create(filename);
ini.WriteInteger(Name, 'Height', Height);
ini.WriteInteger(Name, 'Width', Width);
ini.WriteInteger(Name, 'Top', Top);
ini.WriteInteger(Name, 'Left', Left);
ini.Free;
end;
Diese Methoden muss man dann nur dem OnCreate bzw. dem OnDestroy aller Formulare zuweisen.
Wenn man sich das nun noch in 'ne eigene Komponente packt, könnte man es eventuell auch so in der (ungetesteten) Art lösen:
Delphi-Quellcode:
unit RegForm;
interface
type
TRegForm =
class(TComponent)
fFileName :
String;
public
{ Public-Deklarationen }
constructor Create(AComponent:TComponent);
override;
destructor Destroy;
override;
procedure Read(a : TForm);
overload;
procedure Read;
overload;
procedure Write(a : TForm);
procedure Write;
overload;
property FileName :
String read fFileName
write fFileName;
end;
procedure Register;
implementation
uses
INIFiles;
procedure Register;
begin
RegisterComponents('
Tools', [TRegForm]);
end;
constructor TRegForm.Create(AComponent:TComponent);
begin
Inherited Create(AComponent);
fFileName := Format('
.\%s.ini',[AComponent.
Name]);
end;
destructor TRegForm.Destroy;
begin
Inherited;
end;
procedure TRegForm.
Read(a : TForm);
var
ini : TIniFile;
begin
if a
is TForm
then begin
ini := TInifile.create(fFileName);
a.Width := ini.ReadInteger(a.
Name, '
Width', a.Width);
a.Height := ini.ReadInteger(a.
Name, '
Height', a.Height);
a.Left := ini.ReadInteger(a.
Name, '
Left', a.Left);
a.Top := ini.ReadInteger(a.
Name, '
Top', a.Top);
ini.Free;
end;
end;
procedure TRegForm.Save(a : TForm);
var
ini : TIniFile;
begin
if a
is TForm
then begin
ini := TInifile.create(fFileName);
ini.WriteInteger(a.
Name, '
Height', a.Height);
ini.WriteInteger(a.
Name, '
Width', a.Width);
ini.WriteInteger(a.
Name, '
Top', a.Top);
ini.WriteInteger(a.
Name, '
Left', a.Left);
ini.Free;
end;
end;
procedure TRegForm.
Read;
var
i : Integer;
begin
for i := 0
to Screen.FormCount - 1
do begin
Read(Screen.Forms[i]);
end;
end;
procedure TRegForm.
Write;
var
i : Integer;
begin
for i := 0
to Screen.FormCount - 1
do begin
Write(Screen.Forms[i]);
end;
end;
end.
Komponente auf ein Formular packen und
beim Programmstart an geeigneter Stelle
Delphi-Quellcode:
RegForm.Filename := 'Der gewünschte Name, wenn der Defaultwert aus dem Constructor nicht ok ist.ini';
RegForm.Read;
und beim Programmende