В вашем текущем дизайне у вас есть кнопка на панели задач для свернутого окна, которое отключено из-за модальной формы.Я не думаю, что вы сможете найти разумное решение для этой установки, ни одна форма не получает WM_SYSCOMMAND
- модальную форму, потому что она не имеет кнопки панели задач и основной формы, потому что она отключена.
Измените свою стратегию и переключайте кнопки панели задач, когда вы минимизируете модальную форму.То есть у вас будет кнопка на панели задач для модальной формы, а не для основной формы.Затем вы можете перехватить и повернуть в том же обработчике событий, когда получите команду восстановления.Ниже приведен рабочий пример, но я должен отметить, что изменение владельца окна после того, как оно было создано, настоятельно не рекомендуется и фактически уже давно не документируется.
type
TModalDlg = class(TForm)
...
private
FParentWnd: HWND;
protected
procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
end;
...
procedure TModalDlg.WMSysCommand(var Msg: TWMSysCommand);
begin
if (fsModal in FormState) then begin
case Msg.CmdType and $FFF0 of
SC_MINIMIZE:
begin
SetWindowLong(Handle, GWL_EXSTYLE,
(GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_APPWINDOW));
FParentWnd := GetWindowLong(Handle, GWL_HWNDPARENT);
if FParentWnd <> 0 then
ShowWindow(FParentWnd, SW_HIDE);
SetWindowLong(Handle, GWL_HWNDPARENT, 0);
end;
SC_RESTORE:
begin
SetWindowLong(Handle, GWL_EXSTYLE,
(GetWindowLong(Handle, GWL_EXSTYLE) and not WS_EX_APPWINDOW));
if FParentWnd <> 0 then begin
SetWindowLong(Handle, GWL_HWNDPARENT, FParentWnd);
ShowWindow(FParentWnd, SW_SHOW);
end;
end;
end;
end;
inherited;
end;