Manejo adecuado de la ventana modal Comportamiento "Minimizar"

Tengo el siguiente problema: estamos creando una aplicación bastante grande (win32, Delphi 6 Enterprise). En varias partes de la aplicación, se utilizan ventanas modales, que generalmente contienen el detalle de la selección de la ventana principal.

Incluimos una modificación del manejo de los mensajes WM_SYSCOMMAND para que, si la ventana es modal, se envíe un mensaje SW_SHOWMINNOACTIVE a la ventana principal de la aplicación. Esto hace que toda la aplicación se minimice en lugar de solo la forma modal.

Sin embargo, existe un problema en un caso específico: si la ventana de llamada está configurada en pantalla completa, luego de la restauración, la ventana modal aparecerá BAJO la ventana principal maximizada (deshabilitada) (esto parece suceder en Windows 7) @

Mi problema es doble:

Primero, parece que no recibo ningún mensaje de syscommand cuando la aplicación se restaura más, así que no puedo introducir código para restaurar el Orden Z porque no sé dónde colocarlo. En segundo lugar, me parece que, si se minimiza toda la aplicación, hacer clic en el botón de la aplicación en la barra de tareas debería restaurarla en el mismo estado, no con una ventana modal debajo. ¿Hay alguna manera de arreglar eso?

Edit: hicimos algunas pruebas adicionales y parece que realmente podemos detectar el problema en el controlador WM_ACTIVATE para el formulario principal. También podemos identificar la ventana modal en esa etapa. Sin embargo, no puedo encontrar una manera de restaurarlo en la parte superior de la Orden Z.

Edit2: aquí está el código que minimiza la aplicación cuando se minimiza el formulario modal:

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;

Todas nuestras formas descienden de esa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta