0

子フォームを AlphaBlend する方法を探しています。可能であれば、レイヤード ウィンドウを使用して、その背後にインタラクティブなコントロールがあるためです。

問題は、通常の TForm に、複数のビジュアル レイヤー (図面、写真など) を描画するコンポーネントがあることです。ある時点で、このフォームでエディター コントロールを (インプレースで) インスタンス化する必要があります。このコントロールには、コントロールの外部にあるさまざまな標準入力コントロール (編集ボックス、チェック ボックスなど) が含まれますが、オーバーレイしたいと思います。アルファブレンディングを使用して編集されているレイヤーの前のレイヤー(およびWS_EX_TRANSPARENTクリックスルーにする)。

私は最初にそのために子フォームを使用することを考えました (borderless TForms がコンポーネントの親になっています)、それは問題なく動作し、AlphaBlended TForm がまったくアルファブレンドされず、親になるとすぐに不透明になります...

次に、alphablended フォームの親を外して fsStayOnTop に設定し、関連するイベントに反応して画面上のコンポーネントの前に保持しようとしましたが、これは機能しますが、本当に満足のいく解決策ではありません: alphablended StayOnTop フォームはまた、ユーザーがコンポーネントの前にそれらを移動することを決定した場合、アプリケーションの他のモーダルおよびモードレスフォームの前にも...

では、子フォームをアルファブレンディングする方法に関する他のアイデアはありますか? (またはそのように振る舞う)

4

1 に答える 1

2

MSDNによると、WS_EX_LAYEREDは子ウィンドウには使用できないため、運が悪いとのことです。

フォーム/アプリケーションがフォーカスを失ったときにすべてのエディターフォームを非表示にすると、少なくとも他のウィンドウの上に表示されなくなります。それでも、それは不十分です...

于 2009-05-05T13:29:36.390 に答える