AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Gespeicherter windowState (wsMaximized) maximiert nicht
Thema durchsuchen
Ansicht
Themen-Optionen

Gespeicherter windowState (wsMaximized) maximiert nicht

Ein Thema von DelphiBandit · begonnen am 9. Feb 2010 · letzter Beitrag vom 9. Feb 2010
Antwort Antwort
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#1

Gespeicherter windowState (wsMaximized) maximiert nicht

  Alt 9. Feb 2010, 08: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
eholzer

Registriert seit: 22. Okt 2009
51 Beiträge
 
#2

Re: Gespeicherter windowState (wsMaximized) maximiert nicht

  Alt 9. Feb 2010, 11:35
Ich habe viele Komponenten geprüft, aber einzige die es richtig macht ist hier http://www.delphidabbler.com/software/wdwstate

Eric
  Mit Zitat antworten Zitat
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Gespeicherter windowState (wsMaximized) maximiert nicht

  Alt 9. Feb 2010, 14:44
Hallo Eric,

vielen Dank für den Tipp mit der Komponente. Habe diese im "TSavePosForm" im OnCreate dynamisch erzeugt, da ich sie nicht für alle xx-Formulare visuell einfügen wollte. Das hat leider nicht funktioniert, da sie sich genau dort wohl auch einklinken will um ihre Save/Restore Aktionen durchzuführen.

Ich habe nach einem rumprobieren jetzt doch einen Weg gefunden, im Prinzip geht er in die Richtung des o.a. englischen Links. Ich merke mir im OnCreate den WindowState und arbeite ihn im OnActivate einmalig ab. Mein Fehler bei meinen ersten Versuchen damit war nur, dass das Fenster nicht mehr reagiert, wenn man wsMaximized vorher schon einmal im OnCreate zugewiesen hat. Dann reagiert das Fenster auf nichts mehr (OnActivate oder Testbutton zum Maximieren). Unterlässt man die Zuweisung, dann klappt das Maximieren im OnActivate anschliessend.

Und wenn meine Recherchen richtig waren, dann kommt das Problem wohl eher selten vor und auch nur, wenn viele Komponenten / Align / Splitter usw. sich in die Quere kommen und das Formular mit seinen Aktionen nicht fertig wird.

Bei dieser Gelegenheit habe ich auch gleich GetWindowPlacement(xForm.Handle, PosAndSize) eingebaut, damit kommt man jetzt auch an die Werte im maximierten Modus heran, ohne das Fenster verkleinern zu müssen.

Thread kann somit auf erledigt, Gruss Carsten
Carsten
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.
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