delphi - 在虚拟 TreeView (TVirtualStringTree) 中制作主从 View ,其中每个项目组都有一个标题栏

标签 delphi delphi-xe virtualtreeview

我试图从 TVirtualStringTree 中获得如下所示的结果:

desired virtualtreeview appearance

我相信直接使用TVirtualStringTree(Mike Lischke的主要虚拟 TreeView 控件),或者通过子类化它并修改继承的控件,或者通过转到 TVirtualDrawTree.

这是我可以获得的内容,并显示了我面临的问题:

actual vritualtreeview appearance

我遇到的问题是我似乎无法让第 0 列的文本占据虚拟 TreeView 控件的整个水平区域。高级演示中有一个虚拟 TreeView 演示,显示多行文本,它似乎可以满足我的需要,但我无法弄清楚如何将其与标题行下方所需的详细信息列(显示为节点,节点(图中节点)。

这是我尝试过的:

  • 在BeforeCellPaint事件中修改ContentRect.Right:
  • TreeOptions.MiscOptions 中设置 toGridExtensions

这是一个代码示例,显示了我如何尝试更改 contentRect:

procedure TForm1.VirtualStringTree1BeforeCellPaint(Sender: TBaseVirtualTree;
  TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
  CellPaintMode: TVTCellPaintMode; CellRect: TRect; var ContentRect: TRect);
var
   level:Integer;
begin
 level := VirtualStringTree1.GetNodeLevel(Node);
 if (level=0) then
    Inc( ContentRect.Right, 300);

end;

更新:

使用下面接受的答案,我得到以下结果:

enter image description here

最佳答案

我认为您想使用toAutoSpanColumns选项(在TreeOptions.AutoOptions中),可能与OnGetCellIsEmpty事件一起使用(如果您仅返回第一列的文本)。

要获取多行节点,请使用 ivsMultiline 状态(在 OnInitNode 事件中)初始化它们或设置 vtree.MultiLine[Node] := boolean;

关于delphi - 在虚拟 TreeView (TVirtualStringTree) 中制作主从 View ,其中每个项目组都有一个标题栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7232679/

相关文章:

delphi - 如何在 Delphi XE2 上添加对 HTML 帮助文件 (.chm) 的支持?

Delphi - TSplitter 在运行时对齐

delphi - (RAD Studio) 虚拟 TreeView : how to initialize all nodes at once?

delphi - 如果在主机选项卡不可见时启动图形 (TVideoWindow),DirectShow 渲染窗口将显示黑色

delphi - 如何获取已使用的 DLL 列表?

delphi - 在运行时删除动态创建的按钮

delphi - 双击 TVirtualTreeView (TVirtualStringTree) 标题时如何阻止排序符号隐藏

delphi - 将 TurboPower Lockbox 2 转换为 LockBox 3

windows - 使用内存映射文件实现虚拟内存

delphi - 如何保存和加载我的 svTree 数据结构?