...
procedure Form2.WMActivateApp(var Msg: TWMActivateApp);
begin
if IsIconic(Application.Handle) then begin
ShowWindow(Application.Handle, SW_RESTORE);
SetActiveWindow(Handle);
end;
inherited;
end;
procedure Form2.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType = SC_Minimize) then
ShowWindow(Application.Handle, SW_MINIMIZE)
else
inherited;
end;
Теперь при сворачивании формы сворачивается все приложение.
Проблема заключается в том, что когда вы минимальизируете Form2, он вызывает ShowWindow(Application.Handle, SW_MINIMIZE), что минимальизирует всю приложение.
Чтобы решить это, можно изменить процедуру WMSysCommand для Form2, чтобы она только минимальизировала Form2 саму по себе, а не всю приложение. Вот обновленный код:
Вызов ShowWindow(Handle, SW_MINIMIZE) вместо ShowWindow(Application.Handle, SW_MINIMIZE) обеспечивает минимальизацию только Form2, оставляя остальное приложение в рабочем состоянии.
Обратите внимание, что если вы хотите сохранить тот же поведение при минимальизации основного окна (Form1), можно добавить проверку, чтобы увидеть, какой форм является минимальизированным:
В этом коде IsMainFormActive - это свойство, возвращающее true, если Form1 является активным формой. Если это не так, то минимальизируйте только Form2; иначе минимальизируйте всю приложение.
При сворачивании не главного окна в приложении можно использовать обработчики событий WM_ACTIVATEAPP и WM_SYSCOMMAND, чтобы изменить поведение приложения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.