TVIRTUALSTRINGTREE-如何在不使用所有者draw的情况下绘制标头列



我想借鉴TVirtualStringTree标头列,但我有问题。我需要树列来使用它的"默认绘制"并在其上添加我自己的图形。

如果我将hoOwnerDrawHeader.Options一起使用并使用OnHeaderDraw,我需要自己彻底绘制列(这是不好的(。

OnAdvancedHeaderDraw似乎是我希望的(见示例(:

在为标头启用所有者抽奖并将列设置为 所有者抽奖模式。但是,只有当onheaderdrawqueryelements返回

至少要绘制一个元素。

如果我使用 OnAdvancedHeaderDraw(我还必须使用 OnHeaderDrawQueryElements(我得到了我想要的东西,但是我需要替代 at OnHeaderDrawQueryElements中的一个元素(即 hpeBackground(/ hpeDropMark/ hpeHeaderGlyph/ hpeSortGlyph/ hpeText(并在OnAdvancedHeaderDraw事件中自己绘制。

例如,当我返回hpeSortGlyph元素时,在OnAdvancedHeaderDrawvar 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>

相关内容

  • 没有找到相关文章

最新更新