次の問題があります。かなり大きなアプリケーション(win32、Delphi 6 Enterprise)を構築しています。アプリケーションのいくつかの部分では、モーダルウィンドウが使用され、通常はメインウィンドウの選択の詳細が含まれています。
ウィンドウがモーダルの場合、SW_SHOWMINNOACTIVEメッセージがアプリケーションのメインウィンドウに送信されるように、WM_SYSCOMMANDメッセージの処理の変更を含めました。これにより、モーダル形式だけでなく、アプリケーション全体が最小化されます。
ただし、特定の場合に問題が発生します。呼び出しウィンドウが全画面に設定されている場合、復元時に、モーダルウィンドウが(無効にされた)最大化されたメインウィンドウの下に表示されます(これはWindows 7で発生するようです)
私の問題は2つあります。
まず、アプリケーションを復元してもsyscommandメッセージが表示されないようです。そのため、どこに配置すればよいかわからないため、Zオーダーを復元するコードを導入できません。次に、アプリケーション全体が最小化されている場合、タスクバーのアプリのボタンをクリックすると、モーダルウィンドウが下にない状態で、同じ状態に復元されるはずです。それを修正する方法はありますか?
編集:いくつかの追加のテストを行いましたが、メインフォームの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;
私たちのフォームはすべて、そのフォームから派生しています。