Hallo zusammen,
vorweg habe ich die Suchfunktion genutzt, aber für mein spezielles Problem keinen Ansatz gefunden. In meiner Anwendung werden die Fensterpositionen und deren Window-States gespeichert. Dieser Zustand der Fenster soll nach dem Neustart wieder hergestellt werden. So weit, so gut - dies Thema kam auch reichlich vor.
Unter Delphi 5 hat das bisher auch einwandfrei funktioniert, seit die
IDE auf RS2007 upgedated wurde, allerdings nicht mehr
Ich versuche den
Ist-Zustand mal zu beschreiben.
Im FormCreate (abgeleitet) wird der WindowState auf wsMaximized gesetzt. Allerdings maximiert sich das Fenster nicht, sondern erscheint Top=0 und Left=0 mit der Breite und Weite der gespeicherten Werte für den Normalzustand. Schaltet man danach mit der Maus auf wsNormal um, verschiebt sich das Fenster an die korrekte Position mit den gespeicherten Werten, also auch Left und Top werden verarbeitet. Anschliessendes Maximieren per Maus und das Fenster ist dann jetzt auf voller Bildschirmgrösse. So als kümmere sich das Fenster im ersten Fall nur bedingt um das wsMaximized.
Um bei maximierten Zustand auf die "Normal"-Grösse zuzugreifen wird das Fenster vor dem Speichern auf wsNormal umgeschaltet, bevor es geschlossen wird. Die Werte kommen auch einwandfrei in der Datenbank an, werden korrekt ausgelesen und abgespeichert (Debugger / IBExpert).
Hat einer von Euch eine Idee dazu, warum das auf einmal nicht mehr funktioniert?
Nachtrag 1:
Habe da eben noch einen englischen Thread dazu gefunden und probiere den "Hack" im OnActivate mal aus:
http://www.delphigroups.info/2/6/325133.html
Nachtrag 2: Nein, geht leider auch nicht. Das Hauptformular kümmert sich nicht um wsMaximized
Gruss
Carsten
Delphi-Quellcode:
if not EOF then
begin // schon mal gespeichert
xForm.Top := FieldByName('WinTop').AsInteger;
xForm.Left := FieldByName('WinLeft').AsInteger;
Application.ProcessMessages;
(*
* Falls durch Auflösungswechsel das Fenster
* aus dem Blickfeld geraten ist, wieder in den sichtbaren
* Bereich ziehen
*)
if xForm.Top > Screen.Height then
xForm.Top := 0;
if xForm.Left > Screen.Width then
xForm.Left := 0;
(*
Nur bei Fenstern, deren Größe änderbar ist,
darf die Größe geändert werden!
*)
if xForm.BorderStyle in [bsSizeable, bsSizeToolWin] then
begin
xForm.Height := FieldByName('WinHeight').AsInteger;
xForm.Width := FieldByName('WinWidth').AsInteger;
end;
cWinState := FieldByName('WinStatus').AsString[1];
case cWinState of
'N': xForm.WindowState := wsNormal;
'X': xForm.WindowState := wsMaximized;
'M': xForm.WindowState := wsMinimized;
end;
end;
Close;