德尔菲VirtualTreeview.OnAfterItemPaint问题的滚动时?
-
19-09-2019 - |
题
我要问题绘图使用 OnAfterItemPaint 事件当水平的滚动来执行。
基本上我想要实现合并所选单元的效应,例如说1的案文列1和2,另一个文本为第3栏和4,等等...迄今为止VT没有任何支柱合并,所以我必须手动画。
是否有一个解决办法或另一个事件,我应该使用,而不是?
使用:德尔菲7+VirtualTreeview4.8.5
事件的资料来源:
begin
TargetCanvas.TextOut(ItemRect.Left+ VT1.OffsetX, ItemRect.Top,
'1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF');
end;
前滚动:
alt文本http://a.imagehost.org/0869/screen1.gif
后(scroll右,再向左):
解决方案
这是很难说的,你想达到什么,但是看到你有一个很长的文本,跨越多个列我不知道你使用适当的事件--通常是你想要的文字被截断,如果它太长其列。
无论如何,最好的办法是阅读第5.2"油漆周期和阶段"在 VirtualTreeView.pdf 文件文件,并找到适当的活动可用于什么,你想画画。对于 OnAfterItemPaint
它国家:
后项目的油漆阶段是用于增加节点具体的东西,如框架等 关于所列的节点与被称为每一次节点。
所以我猜它大概是 不 一个你想要使用。
编辑:
好吧,如果你打算用于合并的细胞你只需要拆除的另外的 VT1.OffsetX
(并添加 VT1.TextMargin
相反),以获得正确的行为。这个假设你当然想要开始案文输出,在第一(指数为0)列,否则你需要计算水平的文本位列宽度。
但是,从所说明的的涂料的阶段,我仍然愿意使用的 BeforeItemPaint
事件和设置 CustomDraw
var参数 True
跳过的任何默认画。
其他提示
您是否尝试过这样的:
TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];
它几乎做了你所需要的。他们唯一的问题可能是,你不能指定哪些列是启用了。您可以通过设置CELLTEXT为列你不想跨越到一个空白可能避开这个限制。