在虚拟树视图中为每个项目组创建一个带有标题栏的主 - 详细视图(TVirtualStringTree)

War*_* P 6 delphi virtualtreeview delphi-xe

我试图从TVirtualStringTree得到一个看起来像这样的结果:

所需的virtualtreeview外观

我相信它可以直接使用TVirtualStringTree(Mike Lischke的主要Virtual Treeview控件),或者通过子类化和修改继承的控件,或者转到TVirtualDrawTree.

这是我能得到的,并显示了我面临的问题:

实际的vritualtreeview外观

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

这是我尝试过的:

  • 在BeforeCellPaint事件中修改ContentRect.Right:
  • 开始toGridExtensionsTreeOptions.MiscOptions.

这是一个代码示例,显示了我如何尝试更改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;
Run Code Online (Sandbox Code Playgroud)

更新:

使用下面接受的答案,我得到以下内容:

在此输入图像描述

ain*_*ain 5

我想你想使用toAutoSpanColumnsoption(in TreeOptions.AutoOptions),可能还有OnGetCellIsEmpty事件(如果只为第一列返回文本,则不需要).

获取多行节点使用ivsMultilinestate(在OnInitNode事件中)或set来初始化它们vtree.MultiLine[Node] := boolean;