Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 尽可能真实地填充VirtualStringTree?_Delphi_Addchild_Tvirtualstringtree - Fatal编程技术网

Delphi 尽可能真实地填充VirtualStringTree?

Delphi 尽可能真实地填充VirtualStringTree?,delphi,addchild,tvirtualstringtree,Delphi,Addchild,Tvirtualstringtree,我正在尝试填充一个VirtualStringTree。我的底层数据是这样的,这里显示了许多分支中的3个,每个分支都有不同数量的细枝 string 1 chunk:string 1, fname:c:\temp\file0.txt, freq:8 chunk:string 1, fname:c:\temp\file4.txt, freq:5 chunk:string 1, fname:c:\temp\file2.txt, freq:6 string 2 chunk:string 2

我正在尝试填充一个VirtualStringTree。我的底层数据是这样的,这里显示了许多分支中的3个,每个分支都有不同数量的细枝

string 1
  chunk:string 1, fname:c:\temp\file0.txt, freq:8
  chunk:string 1, fname:c:\temp\file4.txt, freq:5
  chunk:string 1, fname:c:\temp\file2.txt, freq:6
string 2
  chunk:string 2, fname:c:\temp\file1.txt, freq:10
  chunk:string 2, fname:c:\temp\file5.txt, freq:6
  chunk:string 2, fname:c:\temp\file3.txt, freq:4
  chunk:string 2, fname:c:\temp\file4.txt, freq:3
string 3
  chunk:string 3, fname:c:\temp\file2.txt, freq:12
  chunk:string 3, fname:c:\temp\file0.txt, freq:4
  chunk:string 3, fname:c:\temp\file4.txt, freq:5
我的查询涉及如何确保树知道它需要多少不同类型的子节点。RootNodeCount很简单,但我不知道如何在不初始化所有数据的情况下分配不同的“ChildNodeCount”(在这种情况下,为什么要使用VirtualStringTree)

我尝试遍历数据中的条目,并使用AddChild,将nil作为其参数或最后一个节点作为其参数。这是有效的。但我认为这不是一个虚拟的解决方案,因为对AddChild的每个调用都调用InitNode

virtualstringtreebiler.Clear;
VirtualStringTreebiler.BeginUpdate;
virtualstringtreebiler.NodeDataSize:=SizeOf(tboilerec);
重复\u seeker.BuildNodeIndex;
VirtualStringTreebiler.RootNodeCount:=0;
妈妈:=零;
主节点:=nil;
对于i:=0到seeker.NodeCount-1 do
开始
rec:=重复搜索器nodeIndextomanDSub[i];

如果rec.sub_ndx我为此而挣扎。 为了防止它对其他人有所帮助,我学到的(对于我的简单数据,有很多分支,每个分支都有不同数量的分支,但没有分支)是:

  • 一旦知道分支数,就将RootNodeCount设置为您拥有的分支数(如建议的那样)

  • 不要为你的数据建立索引系统,那是浪费精力。让树自动完成它

  • 在InitNode中,首先检查级别:Level:=Sender.GetNodeLevel(节点); 如果级别为0,请检查该节点索引的数据是否有任何分支:

    如果重复.chunks\u list.fileexecutions[Node.Index].Count>0,则 包括(初始状态,ivsHasChildren); 然后调用InitChildren事件。这是你设定的

    ChildCount:=repeats.chunks\u list.FileOccents[Node.Index].Count

  • 如果级别高于0,则排除(InitialStates,ivsHasChildren),然后仅访问ParentNode.index的数据,查找按Node.index编号的分支

  • 节点自动编号。无需设置其索引属性或ChildCount属性

  • 对于级别0(顶级)节点,将其CheckType设置为ctTriStateCheckbox;对于分支,将其CheckType设置为TCheckType(级别)


  • 请看一看有关儿童的事件。在其状态中包含ivsHasChildren的每个节点都将请求此操作。在事件中设置ChildCount。因此,对于虚拟模式,不要使用AddChild。只需设置每个级别的节点数。