Zur Intention des Codes: du möchtest bei Programmstart die Position und Größe des Fensters wiederherstellen, gespeichert beim letzten Programmende?
Dafür würde ich unter Windows eher
SetWindowPlacement und
GetWindowPlacement nehmen.
Ich weiß nicht, ob deine TFitnessMainForm maximiert werden kann oder nicht, aber wenn ja, dann ist es möglich, dass das Fenster bei Programmende maximiert ist und du so die maximierte Position und Größe speicherst und dann beim nächsten Programmstart diese "falschen" Werte dem nicht-maximierten Fenster zuweist. Mit Get/SetWindowPlacement kommst du direkt an die Koordinaten des Normalzustands (rcNormalPosition).
Ungefähr so:
Delphi-Quellcode:
procedure PositionSpeichern(F: TForm; Ini: TCustomIniFile);
var
WP: TWindowPlacement;
begin
WP.length := SizeOf(WP);
if GetWindowPlacement(F.Handle, WP) then
begin
Ini.WriteInteger('Position', 'Links', WP.rcNormalPosition.Left);
Ini.WriteInteger('Position', 'Rechts', WP.rcNormalPosition.Right);
Ini.WriteInteger('Position', 'Oben', WP.rcNormalPosition.Top);
Ini.WriteInteger('Position', 'Unten', WP.rcNormalPosition.Bottom);
Ini.WriteBool('Position', 'Maximiert', F.WindowState = wsMaximized); // oder WP.showCmd = SW_SHOWMAXIMIZED
end
// else Fehlerbehandlung
end;
procedure PositionLaden(F: TForm; Ini: TCustomIniFile);
var
WP: TWindowPlacement;
begin
ZeroMemory(@WP, SizeOf(WP));
WP.length := SizeOf(WP);
WP.rcNormalPosition.Left := Ini.ReadInteger('Position', 'Links', F.Left);
WP.rcNormalPosition.Right := Ini.ReadInteger('Position', 'Rechts', F.Left + F.Width);
WP.rcNormalPosition.Top := Ini.ReadInteger('Position', 'Oben', F.Top);
WP.rcNormalPosition.Bottom := Ini.ReadInteger('Position', 'Unten', F.Top + F.Height);
if not Ini.ReadBool('Position', 'Maximiert', F.WindowState = wsMaximized) then
WP.showCmd := SW_SHOWMAXIMIZED
else
WP.showCmd := SW_SHOWNORMAL;
SetWindowPlacement(F.Handle, WP);
end;