我从TVirtualDrawTree派生自定义控件,我正在覆盖DoPaintBackground
事件,以便为树视图绘制背景渐变效果。
我也覆盖了DoBeforeItemPaint
函数,因此我可以自定义绘制树视图项。但是,我无法完全设法用透明背景绘制项目。
查看TVirtualDrawTree的源代码,看起来该项目被复制到TBitmap图像然后被复制到画布上,但是,我尝试编辑源代码并在位图本身上设置透明度选项但它仍然没有似乎工作正常。
我还尝试在绘制之前清除画布,例如Canvas.Brush.Style := bsClear
并填写项目rect但没有欢乐。
答案 0 :(得分:3)
绘制渐变听起来像很多工作:将它绘制到临时位图,因此每次调用DoPaintBackgrdound()
时都不需要重新生成它。在位图中有背景后,在处理BitBlt
时可以将相关部分DoBeforeItemPaint
放入Canvas中,当需要整个虚拟树时,可以BitBlt
将位图映射到整个虚拟树背景
这样您就不需要为最终用户处理昂贵的透明度,看起来您的项目是使用透明度绘制的。这是一场胜利:胜利局面。