2

TVirtualDrawTreeからカスタムコントロールを派生させており、DoPaintBackgroundイベントをオーバーライドして、ツリービューの背景グラデーション効果を描画しています。

また、関数をオーバーライドしてDoBeforeItemPaint、ツリービューアイテムをカスタム描画できるようにします。しかし、背景を透明にしてアイテムをペイントすることはできません。

TVirtualDrawTreeのソースを見ると、アイテムがTBitmapイメージにコピーされてからキャンバスにコピーされているように見えますが、ソースを編集してビットマップ自体に透明度オプションを設定しようとしましたが、まだ表示されません。働くこと。

また、描画する前にキャンバスをクリアしてCanvas.Brush.Style := bsClear、アイテムを正しく埋めようとしましたが、喜びはありません。

4

1 に答える 1

3

透明性をしないでください、ごまかしてください!

DoPaintBackgrdound()グラデーションの描画は大変な作業のように聞こえます。一時的なビットマップに描画して、が呼び出されるたびに再生成する必要がないようにします。ビットマップに背景ができBitBltたら、を処理するときに関連する部分をCanvasに入れるDoBeforeItemPaintことができBitBlt、背景全体が必要なときに仮想ツリー全体にビットマップを入れることができます。

このように、高価な透明度を処理する必要はありませんが、エンドユーザーにとっては、アイテムが透明度を使用してペイントされているように見えます。それはwin:winの状況です。

于 2011-04-06T14:27:04.623 に答える