Windows 11環境でフォーム上のTButtonなどのコンポーネントの色が透過する
概要
下図のようにWindows 10とWindows 11でフォーム画面を比較すると、Windows 11ではTPanelで設定している色がボタン系のコンポーネントで透過して表示されます。
上記の症状は、Windows 11 ネイティブのUI部品による影響です。
TButtonなどのボタン系コンポーネントは、Windowsコモンコントロールのボタンコントロールのラッパークラスなため、Windowsマニフェストの設定に影響を受けます。その挙動はWindowsの各バージョンが提供するエフェクトに基づくため、今回のような動作となります。これは、VCLに限らず、Visual StudioでWinformアプリケーションを作成など、同じくWindowsのネイティブのUI部品を利用している場合は、同様の挙動となります。
(VCLカスタムスタイルとして、Windowsスタイルを選択している場合は、ネイティブのUI部品をそのまま利用します)
なお、コモンコントロールのボタンコントロールに関する色の透過のオン/オフは、Windows 11の設定メニューも含めて抑止する方法は用意されておらず、もしWindows 10など従来のボタン表示を行うためには、VCLカスタムスタイルのように自前でボタンの外観を描画する必要があります。
よって現状では、 Windows 11も含めてどのWindowsバージョンでも同じような外観にするためには、以下のようないくつかの対処方法が考えられます。
- 画面のデザインを見直す
- (Windows 11でコントロールが透過することを念頭に入れて、画面の色合いをお客様のアプリケーションで調整する)
- VCLカスタムスタイルを利用し、Windows 10やWindows 11などバージョンに影響しないスタイルに統一する
- ボタンを自前で描画する
- (詳しくは、Vcl.StdCtrlユニットのTButtonStyleHook.DrawButtonメソッドの実装コードをご参考ください)
もっとも簡単な解決手段としては、上記の2の方法を推奨いたします。