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
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% 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.
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
:
Tags und Links windows delphi delphi-xe2 winapi event-handling