Delphi 如何在TVirtualDrawTree中创建具有透明背景的节点?

Delphi 如何在TVirtualDrawTree中创建具有透明背景的节点?,delphi,gdi+,transparency,virtualtreeview,Delphi,Gdi+,Transparency,Virtualtreeview,我正在从TVirtualDrawTree派生一个自定义控件,我正在覆盖DoPaintBackground事件以绘制树视图的背景渐变效果 我还重写了DoBeforeItemPaint函数,以便可以自定义绘制树视图项。然而,我不能完全设法让项目画一个透明的背景 查看TVirtualDrawTree的源代码,它看起来像是将项目复制到TBitmap图像,然后复制到画布上,但是,我尝试编辑源代码并在位图本身上设置透明度选项,但它似乎仍然不起作用 我也尝试过在绘图前清除画布,例如canvas.Brush.S

我正在从TVirtualDrawTree派生一个自定义控件,我正在覆盖
DoPaintBackground
事件以绘制树视图的背景渐变效果

我还重写了
DoBeforeItemPaint
函数,以便可以自定义绘制树视图项。然而,我不能完全设法让项目画一个透明的背景

查看TVirtualDrawTree的源代码,它看起来像是将项目复制到TBitmap图像,然后复制到画布上,但是,我尝试编辑源代码并在位图本身上设置透明度选项,但它似乎仍然不起作用

我也尝试过在绘图前清除画布,例如
canvas.Brush.Style:=bsClear
并填充项目rect,但没有乐趣。

不要做透明,作弊! 绘制渐变看起来需要做很多工作:将其绘制到临时位图,这样您就不必每次调用
DoPaintBackgrdound()
时都重新生成渐变。一旦位图中有了背景,当您处理
DoBeforeItemPaint
时,您可以
BitBlt
将相关部分放入画布,当您需要整个背景时,您可以
BitBlt
将位图添加到整个虚拟树中

这样,您就不需要处理昂贵的透明度,但对于最终用户来说,您的项目似乎是使用透明度绘制的。这是一个双赢的局面