Manuseio adequado do comportamento da janela modal “Minimizar”
Eu tenho o seguinte problema: estamos construindo um aplicativo bastante grande (win32, Delphi 6 Enterprise). Em várias partes do aplicativo, janelas modais são usadas, geralmente contendo os detalhes da seleção da janela principa
Incluímos uma modificação no tratamento das mensagens WM_SYSCOMMAND para que, se a janela for modal, uma mensagem SW_SHOWMINNOACTIVE seja enviada para a janela principal do aplicativo. Isso faz com que todo o aplicativo seja minimizado, em vez de apenas a forma moda
No entanto, existe um problema em um caso específico: se a janela de chamada estiver configurada para tela cheia, após a restauração, a janela modal aparecerá SOB A janela principal maximizada (desativada) (isso parece acontecer no Windows 7)
Meu problema é duplo:
Primeiro, parece que não recebo mais nenhuma mensagem de comando do sistema quando o aplicativo é restaurado, por isso não posso introduzir código para restaurar o Z-Order, porque não sei onde colocá-lo. Segundo, parece-me que, se todo o aplicativo for minimizado, clicar no botão do aplicativo na barra de tarefas deve restaurá-lo no mesmo estado, não com uma janela modal embaixo. Existe uma maneira de corrigir isso?
Edit: fizemos alguns testes adicionais e parece que podemos realmente detectar o problema no manipulador WM_ACTIVATE para o formulário principal. Também podemos identificar a janela modal nessa fase. No entanto, não consigo encontrar uma maneira de restaurá-lo para o topo da Ordem Z.
Edit2: aqui está o código que minimiza o aplicativo quando o formulário modal é minimizado:
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;
Todos os nossos formulários descendem dess