IMO, Вы не можете использовать WM_GETMINMAXINFO
, чтобы "определить, когда операция максимизации собирается начать ", как указано @Remy.
Фактически единственное сообщение, которое может это WM_SYSCOMMAND
с Msg.CmdType=SC_MAXIMIZE
или без документов SC_MAXIMIZE2 = $F032
- но оно не отправляется через Win+UP
или, например, с помощью ShowWindow(Handle, SW_MAXIMIZE)
.
Единственный способ определить, что окно должно быть развернуто, - это WM_WINDOWPOSCHANGING
, который запускается сразу после WM_GETMINMAXINFO
:
type
TForm1 = class(TForm)
private
procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
end;
implementation
const
SWP_STATECHANGED = $8000;
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
inherited;
if (Message.WindowPos^.flags and (SWP_STATECHANGED or SWP_FRAMECHANGED)) <> 0 then
begin
if (Message.WindowPos^.x < 0) and (Message.WindowPos^.y < 0) then
ShowMessage('Window state is about to change to MAXIMIZED');
end;
end;