Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#11

AW: Fensterpositionen mit Hilfe einer Unit speichern

  Alt 17. Nov 2016, 20:38
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;
  Mit Zitat antworten Zitat