Wie erkennt man, wenn das Formular maximiert wird?

8

Ich würde gerne feststellen, wann das Formular maximiert wird, um bestimmte Einstellungen zu speichern (unabhängig von der Größe oder Position) und die Größe und Position ein wenig ändern. Gibt es einen universellen Weg, es zu tun? Ich habe versucht, die WM_SYSCOMMAND-Nachricht wie in diesem Artikel zu erfassen. Es funktioniert gut für die Maximierung aus dem Menü, durch die Schaltfläche Maximieren, aber es wird nicht ausgelöst, wenn ich die WIN + UP-Tastenkombination drücke. Kennt jemand einen universellen Weg, wie man das Maximierungsereignis einschließlich des Falles mit WIN + UP Tastenanschlag fängt?

Danke

    
Martin Reiner 14.03.2012, 14:38
quelle

3 Antworten

11

Sie können die WM_GETMINMAXINFO Nachricht, um den Status des Fensters zu speichern und dann die WMSize Nachricht um zu überprüfen, ob das Fenster maximiert wurde.

in Ihrem Formular deklarieren Sie den Nachrichtenhandler wie folgt:

%Vor%

Und handle so:

%Vor%     
RRUZ 14.03.2012, 14:54
quelle
7

WIN + UP generiert WM_SYSCOMMAND Nachrichten nicht, deshalb können Sie sie nicht abfangen. Es generiert jedoch WM_GETMINMAXINFO , WM_WINDOWPOSCHANGING , WM_NCCALCSIZE , WM_MOVE , WM_SIZE und WM_WINDOWPOSCHANGED . Wie RRUZ sagte, verwenden Sie WM_GETMINMAXINFO , um zu erkennen, wann eine Maximierung beginnt und WM_SIZE , um zu erkennen, wann sie beendet ist.

    
Remy Lebeau 14.03.2012 16:48
quelle
7

IMO, Sie können WM_GETMINMAXINFO nicht verwenden, um "zu erkennen, wann eine Maximierungsoperation beginnt ", wie @Remy angegeben hat.

Tatsächlich ist die einzige mögliche Nachricht WM_SYSCOMMAND mit Msg.CmdType=SC_MAXIMIZE oder undocumented SC_MAXIMIZE2 = $F032 - aber es wird nicht über Win+UP gesendet, oder zB ShowWindow(Handle, SW_MAXIMIZE) verwendet.

Der einzige Weg, wie ich feststellen könnte, dass ein Fenster maximiert werden soll, ist via WM_WINDOWPOSCHANGING , welches direkt nach WM_GETMINMAXINFO :

ausgelöst wird %Vor%     
kobik 14.03.2012 18:10
quelle