Windows 11でMainFormOnTaskBar=falseに設定しているアプリケーションは、 モニターの電源(オン/オフ)によって、フォームが最小化された状態から戻らなくなることがある
対象となるWindowsバージョン
- Windows 11
問題
RAD Studio 11をご利用のお客様からWindows 11でマルチモニターを使用し、一時的にメインディスプレイの電源をOFF、そしてディスプレイの電源をONにすると、 アプリケーションのフォームは最小化されたまま元のサイズに戻らなくなる症状が発生するという報告がありました。
上記の症状が発生する条件としては、以下の通りです。
- Windows 11の設定で「システム」-「ディスプレイ設定」-「マルチ ディスプレイ」で 「モニターが接続されていない時にウィンドウを最小化する」にチェック(既定値)
- アプリケーションのメインルーチンのソース内でApplication.MainFormOnTaskBar=Falseに設定
例えば、簡単な再現手順は以下の通りです。
- DelphiのVCLフォームアプリケーションを新規作成
- プロジェクトのメインルーチンのソース(例えば、Project1.dpr)を開き、Application.MainFormOnTaskBar := Trueの行を削除
- Windows 11のマルチモニター環境で実行し、メインモニターにアプリケーションを表示
- メインモニターの電源をオフ(この際、Windows 11のオプションによってアプリケーションが最小化されます)
- メインモニターの電源をオンにします。
- メインモニターのWindows11タスクバーから最小化されたアプリケーションを元に戻す
上記の手順を実行すると、最小化されたアプリケーションが戻らない症状が発生する場合があります。
(ただし、ご利用になっている外部ディスプレイの種類によって、同じ手順で再現しないことがあります)
Delphi/C++Builder 2006以前のバージョンでビルドしているプロジェクトでは、Application.MainFormOnTaskBarの設定は存在せず、Application.MainFormOnTaskBar := Falseと同等の挙動になるため、上記のような症状が発生することがあります。
Delphi/C++Builder 2007以降のバージョンでのデフォルト設定は、Application.MainFormOnTaskBar=Trueのため
お客様のプロジェクトで、この設定を変更していない場合は特に影響しません。
解決
お客様の作成しているプロジェクトで以下に該当する場合、
- Delphi/C++Builder 2007以降でApplication.MainFormOnTaskBar = Falseに設定しているアプリケーション
- Delphi/C++Builder 2006以前のバージョンでビルドしているアプリケーション
この問題の対処方法は、下図のようにWindows 11の設定で「システム」-「ディスプレイ設定」-「マルチ ディスプレイ」で 「モニターが接続されていない時にウィンドウを最小化する」のチェックを外して、フォームが最小化しない設定に変更する方法をお試しください。