我要问题绘图使用 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右,再向左):

alt文本http://a.imagehost.org/0645/screen2.gif

有帮助吗?

解决方案

这是很难说的,你想达到什么,但是看到你有一个很长的文本,跨越多个列我不知道你使用适当的事件--通常是你想要的文字被截断,如果它太长其列。

无论如何,最好的办法是阅读第5.2"油漆周期和阶段"在 VirtualTreeView.pdf 文件文件,并找到适当的活动可用于什么,你想画画。对于 OnAfterItemPaint 它国家:

后项目的油漆阶段是用于增加节点具体的东西,如框架等 关于所列的节点与被称为每一次节点。

所以我猜它大概是 一个你想要使用。

编辑:

好吧,如果你打算用于合并的细胞你只需要拆除的另外的 VT1.OffsetX (并添加 VT1.TextMargin 相反),以获得正确的行为。这个假设你当然想要开始案文输出,在第一(指数为0)列,否则你需要计算水平的文本位列宽度。

但是,从所说明的的涂料的阶段,我仍然愿意使用的 BeforeItemPaint 事件和设置 CustomDraw var参数 True 跳过的任何默认画。

其他提示

您是否尝试过这样的:

TreeOptions.AutoOptions := TreeOptions.AutoOptions + [toAutoSpanColumns];

它几乎做了你所需要的。他们唯一的问题可能是,你不能指定哪些列是启用了。您可以通过设置CELLTEXT为列你不想跨越到一个空白可能避开这个限制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top