Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Position von Programmfenster in *.ini speichern? (https://www.delphipraxis.net/10216-position-von-programmfenster-%2A-ini-speichern.html)

Tim.exe 14. Okt 2003 09:33


Position von Programmfenster in *.ini speichern?
 
Hallo,

ich versuche gerade die geänderte Position eines Formulars in eine *.ini zu speichern.
Das speichern an sich ist auch kein Problem und funktioniert, nur bei einem erneuten Aufruf soll das Programm wieder an der Position angezeigt werden an der es das letzte Mal beendet wurde und das tut es nicht.

Vielleicht kann man die Position "left" und "top" direkt in eine *.ini schreiben, ich bin aber den Umweg über 2 Edits gegangen die die Position auslesen und speichern.

Code:

Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
var savestat: TIniFile;
begin
savestat := TIniFile.Create(ExtractFilepath(Application.Exename)+'settings.ini');
try
Edit1.Text := savestat.ReadString('Left','Status1',Edit1.Text);
Edit2.Text := savestat.ReadString('Top','Status1',Edit2.Text);
finally
savestat.Free;
end;

If RadioBox1.Checked then
Form1.Left := StrToInt(Edit1.Text);
Form1.Top := StrToInt(Edit2.Text);

end;

procedure TForm1.FormDestroy(Sender: TObject);
var savestat: TIniFile;
begin
Edit1.Text := IntToStr(Form1.Left);
Edit2.Text := IntToStr(Form1.Top);
savestat := TIniFile.Create(ExtractFilepath(Application.Exename)+'settings.ini');
try
savestat.WriteString('Left','Status1',Edit1.Text);
savestat.WriteString('Top','Status1',Edit2.Text);
finally
savestat.Free;
end;

end;

APP 14. Okt 2003 09:50

Re: Position von Programmfenster in *.ini speichern?
 
Hallo Tim,

global
Delphi-Quellcode:
CONST
...
  SectionSystem         = 'System';
  KeyFormLeft           = 'FormLeft';
  KeyFormTop            = 'FormTop';
...
(fMain = Hauptformular)

schreiben (z.B. in FormDestroy/Close)
Delphi-Quellcode:
  IniFile.WriteInteger(SectionSystem, KeyFormLeft, fMain.Left);
  IniFile.WriteInteger(SectionSystem, KeyFormTop, fMain.Top);
lesen (z.B. in FormCreate)
Delphi-Quellcode:
  fMain.Left:= IniFile.ReadInteger(SectionSystem, KeyFormLeft, 0);
  fMain.Top:= IniFile.ReadInteger(SectionSystem, KeyFormTop, 0);

sakura 14. Okt 2003 09:56

Re: Position von Programmfenster in *.ini speichern?
 
Das Widerherstellen der Position kann nicht im OnCreate Ereignis erledigt werden, weiche einfach auf das OnActivate Ereignis aus, dann sollte es klappen.

...:cat:...

Tom 14. Okt 2003 09:59

Re: Position von Programmfenster in *.ini speichern?
 
Zitat:

Zitat von sakura
Das Widerherstellen der Position kann nicht im OnCreate Ereignis erledigt werden,

Wieso?
Delphi-Quellcode:
  form1.Left := 1;
  form1.Top := 1;
Kein Problem unter D6 im OnCreate-Ereignis.

APP 14. Okt 2003 10:02

Re: Position von Programmfenster in *.ini speichern?
 
Hallo,
bei mir funkts auch (D7Ent).

Tim.exe 14. Okt 2003 10:05

Re: Position von Programmfenster in *.ini speichern?
 
Hallo,

klappt leider immer noch nicht. Wobei ich sagen muss das Form1.Position auf "poDesktopCenter" steht.

Wenn ich die Position auf "poDesigned" stelle, wird es auch nicht an der geänderten Position angezeigt sondern bei Left: 1 / Top: 1 (obwohl es im Designmodi ca. in der Mitte steht)

Tom 14. Okt 2003 10:08

Re: Position von Programmfenster in *.ini speichern?
 
Zitat:

Zitat von Tim.exe
klappt leider immer noch nicht. Wobei ich sagen muss das Form1.Position auf "poDesktopCenter" steht.

Sehr witzig ...

Zitat:

Wenn ich die Position auf "poDesigned" stelle, wird es auch nicht an der geänderten Position angezeigt sondern bei Left: 1 / Top: 1 (obwohl es im Designmodi ca. in der Mitte steht)
Hast Du die Variante von Armin übernommen?

Tim.exe 14. Okt 2003 10:19

Re: Position von Programmfenster in *.ini speichern?
 
Ja hab ich, und das OnCreate ist jetzt das OnActivate Ereignis. Form1.Pos ist auf "poDesigned" gestellt. Fenster wird aber immer wie designed angzeigt, auch wenn die Position geändert wurde.

Tom 14. Okt 2003 10:29

Re: Position von Programmfenster in *.ini speichern?
 
Erstelle ein neues leeres Projekt. Mach ein Doppelklick auf onCreate und schreibe
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  form1.Left := 100;
  form1.Top := 100;
end;
und drücke F9. Wie ist das Ergebnis?

Tim.exe 14. Okt 2003 10:37

Re: Position von Programmfenster in *.ini speichern?
 
Ergebnis ist:

vom linken Bildschirmrand: 100
vom oberen Bildschirmrand 100


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:50 Uhr.
Seite 1 von 2  1 2      

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