3

透過性を考慮した TDbgrid の列に画像を追加しようとしています。DBGridDrawColumnCell プロシージャでキャンバス上の TImageList から画像を描画する場合、透明にするために画像の背景 (左下隅のピクセルと同じ色) が必要です。特に Aero などのテーマが使用されている場合は、この透明領域にハイライト カラーまたは非ハイライト カラーを表示したいと考えています。古いバージョンの Windows では、背景色として clHighlight または clWindow の色値を使用してこれを実現できました。ただし、Aero テーマでは、Aero が使用するグラデーション ブルーのハイライト カラーではなく、画像の非透過部分の背後に常にボックスが描画されます。どうすればこれを達成できますか?

アルファチャンネルを使用することになっていると思いますが、TImageList からキャンバスにこれを行う方法がわかりません。セル内のキャンバスに描画を開始する前に、セルは実際のハイライト色で完全にペイントされていると思います。画像の非透明部分を描画して背景を残したいだけです。

4

1 に答える 1

1

Aero などのテーマが使用されている場合でも、透過性を使用して dbgrid に画像を表示する方法を最終的に決定することができました。

通常の TImageList を使用して、dbgrid に表示する必要がある画像をロードしました。私の場合は 2 つあり、アイコン (ico) 形式でした。ほとんどの古いコードが推奨するように、イメージをビットマップに転送してから dbgrid キャンバスに描画する代わりに、DBGridDrawColumnCell プロシージャで次の単純なコードを使用しました。

if DataCol=0 then
begin
     if (MApptsConflict.Value='<none>') then
         ImageIndex := 0
     else
         ImageIndex := 1;

     ImageList.Draw(TDBGrid(Sender).Canvas,Rect.Left+2,Rect.Top+2,ImageIndex,True);
end; 

これにより、TImageList から dbgrid キャンバスに直接描画され、必要な透明度が得られます。

更新:Timagelistにロードされたbmpで試してみましたが、うまくいきました。

于 2015-05-18T19:13:48.727 に答える