gpt4 book ai didi

delphi - TVirtualStringTree - 如何在不使用 OwnerDraw 的情况下在标题列上绘图?

转载 作者:行者123 更新时间:2023-12-03 15:53:51 36 4
gpt4 key购买 nike

我想在 TVirtualStringTree 标题列上绘图,但我遇到了问题。我需要树列来使用它的“默认绘制”并在其上添加我自己的图形。

如果我将 hoOwnerDrawHeader.Options 一起使用并使用 OnHeaderDraw,我需要自己完全绘制列(这不好) 。

OnAdvancedHeaderDraw 这似乎是我所希望的( see example ):

Used when owner draw is enabled for the header and a column is set to owner draw mode. But only if OnHeaderDrawQueryElements returns at least one element to be drawn by the application.

如果我使用OnAdvancedHeaderDraw(我还必须使用OnHeaderDrawQueryElements),我会得到我想要的,但是我需要替代 OnHeaderDrawQueryElements 中至少有一个元素(即 hpeBackground/hpeDropMark/hpeHeaderGlyph/ hpeSortGlyph/hpeText)并在 OnAdvancedHeaderDraw 事件中自行绘制。

例如,当我返回 hpeSortGlyph 元素时,在 OnAdvancedHeaderDraw 的 var PaintInfo: THeaderPaintInfo 中返回 ShowSortGlyph := True 没有任何区别,并且排序字形没有被绘制,这意味着我必须自己绘制它。由于没有 DefaultDrawSortGlyph 我需要重新发明,可以这么说,并从 VT 源复制大部分代码只是为了绘制排序字形:/

我使用/需要列中的所有元素,我只想在默认列图形(下拉箭头)之上添加我自己的图形,而不替换其中之一。我怎样才能避免这种行为?是否可以在不修补源的情况下在现有列的顶部进行绘制?

我希望我的问题很清楚。

最佳答案

自 VT 7.0 起,您可以查询并绘制 hpeOverlay 标题绘制元素。

<小时/>

对于旧版本:

目前没有简单的方法可以在完全渲染的标题列上进行绘制(VT 6.7.0)。但是对源代码的简单修改可能是例如扩展由例如 hpeOverlay 设置的 THeaderPaintElements 标志,以及行:

ActualElements := RequestedElements * [hpeHeaderGlyph, hpeSortGlyph, hpeDropMark,
hpeText];

更改为:

ActualElements := RequestedElements * [hpeHeaderGlyph, hpeSortGlyph, hpeDropMark,
hpeText, hpeOverlay];

然后您可以在 OnHeaderDrawQueryElements 事件中仅查询 hpeOverlay 元素,默认情况下会绘制所有元素,并且 OnAdvancedHeaderDraw 事件将仅针对这个新元素而被解雇。

主要贡献者 Joachim Marder 提交了 enhancement issue添加此类扩展,该扩展已提交到存储库,因此当前版本的 VT 支持建议的增强功能。

关于delphi - TVirtualStringTree - 如何在不使用 OwnerDraw 的情况下在标题列上绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44255873/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com