5

Delphi XE2 には、画像のサムネイルを含む ListView があります。サムネイルの 1 つをクリックすると、ListView が暗い半透明のレイヤーで覆われ、クリックされた画像がこのレイヤーの上にズームされます。

ListView の上に TImage を配置することはできないため、レイヤーに AlphaBlend 128 透明度を持つ別のフォームを使用しようとしました。ただし、この AlphaBlend フォームは、その上の TImage もアルファ透明にします。

したがって、ターゲットはレイヤーフォームを AlphaBlend-transparent にすることですが、その上の画像は作成しないようです。これはどのように達成できますか?


2012 年 8 月 7 日の編集:

解決しました!! このイメージを育てるための決定的なヒントを与えてくれた Remy Lebeau に感謝します。Opacity (つまり AlphaBlend) プロパティを持つことがわかっている唯一の画像タイプである TMS から TW7Image を見つけました。私はこの手順を使用しました:

W7Image で、Picture プロパティに Black 画像を読み込み、Opacity を 192 に設定し、Stretch モードを設定します。

他の画像を中央、プロポーショナルなどに設定してから、次のようにします。

// In this order (!):
// 1.
imgSemiTransparentBlackLayer.Parent := MyListView;
imgSemiTransparentBlackLayer.Align := alClient;
// 2.
imgTop.Picture.LoadFromFile('MyPicture.png');
imgTop.Parent := MyListView;
imgTop.Align := alClient;
4

1 に答える 1

4

TForm.AlphaBlendプロパティは、全体TFormとして全体に適用されます。TForm代わりに、ネイティブでサポートされていないピクセルごとのアルファ ブレンディングが必要です。を呼び出しUpdateLayeredWindow()てピクセルごとのアルファを実装することもできますが、それは VCL の の使用と競合する可能性がありSetLayeredWindowAttributes()ます。

TForm純粋な VCL ソリューションの場合、2 つのオブジェクトを使用してみることができます。1 つに背景をTForm含まず、その上に2 つ目を配置します。2 つ目はとプロパティの両方を有効にし、 と同じ寸法のの正方形を持ち、暗い背景色を取得しますその下にあるものとアルファブレンドされます。TImageTFormTFormTransparentColorAlphaBlendTransparenColorValueTImage

別の解決策は、Win32 APICreateWindowEx()関数を直接使用して画像ウィンドウを作成し、それを使用UpdateLayeredWindow()することです。TImageこれには、ウィンドウの描画をサポートするメモリ内ビットマップを作成する必要があるため、コンポーネントを使用するのではなく、そのビットマップに直接画像を描画できます。次に、暗い背景を指定し、画像ピクセルを囲むビットマップ ピクセルのピクセルごとのアルファを指定します。

ところで、 をとして設定すると、を の上に置くことができます。をアルファブレンドすることはできません。それだけです。TImageTListViewTListViewTImage.ParentTImage

于 2012-08-07T02:05:51.740 に答える