Einzelnen Beitrag anzeigen

Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: In der Lüneburger Heide
165 Beiträge
 
Delphi 10.4 Sydney
 
#1

Gespeicherter windowState (wsMaximized) maximiert nicht

  Alt 9. Feb 2010, 09:56
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;
Carsten
  Mit Zitat antworten Zitat