У меня следующая проблема: мы создаем довольно большое приложение (win32, Delphi 6 Enterprise). В некоторых частях приложения используются модальные окна, обычно содержащие подробности выбора главного окна.
Мы включили модификацию обработки сообщений WM_SYSCOMMAND, так что, если окно является модальным, то SW_SHOWMINNOACTIVE сообщение будет отправлено в главное окно приложения. Это приводит к сворачиванию всего приложения, а не только модальной формы.
Однако в конкретном случае возникает проблема: если вызывающее окно настроено на полноэкранный режим, то при восстановлении появится модальное окно ПОД (отключенным) развернутым главным окном (похоже, это происходит в Windows 7)
Моя проблема состоит из двух частей:
Во-первых, я больше не получаю сообщения syscommand, когда приложение восстанавливается, поэтому я не могу ввести код для восстановления Z-порядка, потому что не знаю, куда его поместить. Во-вторых, мне кажется, что если все приложение свернуто, нажатие кнопки приложения на панели задач должно восстановить его в том же состоянии, а не с модальным окном под ним. Есть ли способ исправить это?
Edit: мы провели дополнительное тестирование и, кажется, действительно можем обнаружить проблему в обработчике WM_ACTIVATE для основной формы. На этом этапе мы также можем идентифицировать модальное окно. Однако я не могу найти способ восстановить его в верхней части Z-порядка.
Edit2: вот код, который минимизирует приложение, когда модальная форма свернута:
procedure TfmGITForm.WMSysCommand(var Message: TWMSysCommand);
begin
if (fsModal in FormState) or
not Application.MainForm.Visible then
begin
case Message.CmdType of
SC_MINIMIZE:
begin
ShowWindow(Application.Handle, SW_SHOWMINNOACTIVE);
end;
SC_RESTORE:
begin
ShowWindow(Application.Handle, SW_SHOWNORMAL);
inherited;
end;
else
inherited;
end; // case
end
else
inherited;
end;
Все наши формы происходят от этой формы. .