Ich habe diesmal fast schon ein Anfängerproblem und ich bin mir da nicht sicher ob das nicht ein Lazarus Bug ist. Folgender Quellcode:
Code: Alles auswählen
procedure TForm1.FormCreate(Sender: TObject);
Var Ini: TIniFile;
begin
Ini := TIniFile.Create('my.ini');
rcForm.Left := ini.ReadInteger('F', 'L', Left);
rcForm.Top := ini.ReadInteger('F', 'T', Top);
rcForm.Right := ini.ReadInteger('F', 'W', Width);
rcForm.Bottom := ini.ReadInteger('F', 'H', Height);
stWindowForm := TWindowState(ini.ReadInteger('F', 'S', ord(WindowState)));
Ini.Free;
Left := rcForm.Left;
Top := rcForm.Top;
Width := rcForm.Right;
Height := rcForm.Bottom;
WindowState := stWindowForm;
end;
procedure TForm1.FormDestroy(Sender: TObject);
Var Ini: TIniFile;
begin
Ini := TIniFile.Create('my.ini');
If WindowState = wsNormal Then
Begin
ini.WriteInteger('F', 'L', Left);
ini.WriteInteger('F', 'T', Top);
ini.WriteInteger('F', 'W', Width);
ini.WriteInteger('F', 'H', Height);
end;
If WindowState <> wsMinimized Then
ini.WriteInteger('F', 'S', ord(WindowState));
ini.UpdateFile;
ini.Free;
end;
- Formular wiederherstellen wsMaximized / wsNormal
- bei wsNormal die Position
- wenn wsMaximized ist und man drückt wsNormal (Border-Icon) dann soll das Formular auf die letzte bekannte (INI Datei) Größe/Position springen.
Das Vorgehen:
Start EXE, wsNormal.
Ende EXE, speichern Position + wsNormal
Start EXE, Position zeigt sich richtig
Drücke BorderIcon für wsMaximized
Ende EXE, speichert wsMaximized, keine Position
Start EXE, wiederherstellen von wsMaximized
Drücke BorderIcon für wsNormal >> Fehler Größe/Position falsch
Nun, ich habe darauf hin versucht das zu korrigieren indem ich diesen Code dazu geschrieben habe:
Code: Alles auswählen
procedure TForm1.FormWindowStateChange(Sender: TObject);
begin
If (stWindowForm = wsMaximized) And (WindowState = wsNormal) Then
Begin
Left := rcForm.Left;
Top := rcForm.Top;
Width := rcForm.Right;
Height := rcForm.Bottom;
stWindowForm := wsMinimized;
end;
end;
EXE beenden speichert die falschen Werte in die INI Datei, also Width/Height werden nicht korrekt aus dem Formular gelesen.
Erst wenn das Formular ein mal verschoben wird, dann klappt das !?
Weiß jemand wie ich das anstelle, dass es richtig klappt?
Grüße Markus
Edit: Var rcForm: TRect;