Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fensterpositionen mit Hilfe einer Unit speichern (https://www.delphipraxis.net/190895-fensterpositionen-mit-hilfe-einer-unit-speichern.html)

nahpets 17. Nov 2016 20:38

AW: Fensterpositionen mit Hilfe einer Unit speichern
 
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
Delphi-Quellcode:

RegForm.Write;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:44 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz