AlphaBlendの子フォーム
-
05-07-2019 - |
質問
子フォームをAlphaBlendする方法を探しています。可能であれば、背後にインタラクティブなコントロールがあるため、レイヤードウィンドウを使用します。
問題は、複数の視覚レイヤー(描画、画像など)をペイントする通常のTFormにコンポーネントがあることです。ある時点で、このフォームにエディターコントロールをインスタンス化する必要があります(インプレース)。このコントロールには、コントロールの外部のさまざまな標準入力コントロール(編集ボックス、チェックボックスなど)が含まれますが、オーバーレイしたいアルファブレンディングを使用して編集中のレイヤーの前のレイヤー(および WS_EX_TRANSPARENT
を使用してクリックスルーします)。
そのために最初に子フォームを使用することを考えました(コンポーネントに親であるボーダーレス TForm
s)、それはAlphaBlended TFormがまったくアルファブレンドされない点まで問題なく動作しますが、親になるとすぐに不透明になります...
次に、アルファブレンドされたフォームの親を解除してfsStayOnTopに設定し、関連するイベントに反応することにより、画面上のコンポーネントの前にそれを保持しようとしましたが、それは動作しますが、それは本当に満足できるソリューションではありません:アルファブレンドStayOnTopフォームは、ユーザーがコンポーネントの前でそれらを移動することにした場合、アプリケーションの他のモーダルおよびモードレスフォームの前にもあります...
では、子フォームをアルファブレンドする方法に関する他のアイデアはありますか? (またはそのように動作します)
解決
MSDNによれば、 WS_EX_LAYERED は子ウィンドウには使用できません。
フォーム/アプリケーションがフォーカスを失ったときにすべてのエディターフォームを非表示にして、少なくとも他のウィンドウの上に表示されないようにすることができます。それでも、それは不十分です...