我想借鉴TVirtualStringTree
标头列,但我有问题。我需要树列来使用它的"默认绘制"并在其上添加我自己的图形。
如果我将hoOwnerDraw
与Header.Options
一起使用并使用OnHeaderDraw
,我需要自己彻底绘制列(这是不好的(。
有OnAdvancedHeaderDraw
似乎是我希望的(见示例(:
在为标头启用所有者抽奖并将列设置为 所有者抽奖模式。但是,只有当onheaderdrawqueryelements返回
至少要绘制一个元素。
如果我使用 OnAdvancedHeaderDraw
(我还必须使用 OnHeaderDrawQueryElements
(我得到了我想要的东西,但是我需要替代 at OnHeaderDrawQueryElements
中的一个元素(即 hpeBackground
(/ hpeDropMark
/ hpeHeaderGlyph
/ hpeSortGlyph
/ hpeText
(并在OnAdvancedHeaderDraw
事件中自己绘制。
例如,当我返回hpeSortGlyph
元素时,在OnAdvancedHeaderDraw
的var PaintInfo: THeaderPaintInfo
中返回ShowSortGlyph := True
不会有任何区别,而排序的glyph也没有涂漆,这意味着我必须自己绘画。由于没有DefaultDrawSortGlyph
,因此我需要重新发明Weal,可以这么说,并从VT源复制代码的大部分只是为了绘制glyph:/
我使用/需要列中的所有元素,我只想在默认列图形(下拉箭头(上添加我自己的图形而无需替换其中之一。如何避免这种行为?是否可以在不修补源的情况下绘制在列的顶部?
我希望我的问题很清楚。
由于vt 7.0,您可以查询和绘画 hpeoverlay header Paint Element。
对于较旧版本:
目前没有简单的方法可以在完全渲染的标头列上绘画(VT 6.7.0(。但是,可以简单地修改源代码,例如扩展 theaderPaintelements 由例如 hpeoverlay设置的标志和行:
ActualElements := RequestedElements * [hpeHeaderGlyph, hpeSortGlyph, hpeDropMark,
hpeText];
更改为:
ActualElements := RequestedElements * [hpeHeaderGlyph, hpeSortGlyph, hpeDropMark,
hpeText, hpeOverlay];
然后,您可以仅查询 hpeoverlay element element onheaderDrawQueryElements 事件,所有元素将默认绘制为 onadvancedHeaderDraw event event event event
主要贡献者Joachim Marder提交了增强问题以添加已将其用于存储库的扩展名,因此当前版本的VT支持了拟议的增强。
<</p> <</p> <</p> <</p> <</p> <</p>