标签: virtualtreeview

(RAD Studio)Virtual TreeView:如何一次初始化所有节点?

我刚刚发现了这个组件并开始使用它.

我知道它的整个概念是在需要的时候初始化节点,但我需要所有节点立即初始化.

有什么聪明的方法呢?

我想出的唯一一件事是在添加节点后使用GetLast().
我相信,还有更好的方法吗?

delphi virtualtreeview

2
推荐指数
1
解决办法
2705
查看次数

如何使多个虚拟树视图节点的检查状态保持同步?

我的树有两级节点 - 它是一个联系人列表样式树.

我的问题是,我希望在所有"联系人类别"中检查所有联系人.这是我现在看的联系人列表的截图(是的,我有权发布)

联系人列表

如您所见,Todd Hirsch在类别测试类别中进行了检查,但未在所有联系人中进行检查.我想要实现的目标是让联系人在每个类别中都具有相同的检查状态.

示例:我在测试类别中检查Todd Hirsch - Todd Hirsch会自动检入所有联系人(以及其他所有类别).如果我在所有联系人中查看Todd Hirsch,他也将在测试类别中进行检查.如果我在所有联系人中取消选中Todd Hirsch,他也将在测试类别中取消选中.

我尝试通过VirtualStringtree的OnChecking事件,通过循环遍历树中每个节点的整个树,但是当联系人列表很大(2000 +)时,它非常慢,当它有5000+时,它甚至可能崩溃我的程序(应用程序已停止工作)

你有什么建议?

这是我用来确保只检查一次联系人的代码.(这不是我现在想要的,但这就是我现在正在使用的.)

////////////////////////////////////////////////////////////////////////////////
/// HasDuplicateChecked
////////////////////////////////////////////////////////////////////////////////
Function HasDuplicateChecked(Node: PVirtualNode): PVirtualNode;
Var
  ParentNode, ChildNode: PVirtualNode;
  I, J: Integer;
Begin

  // IHCW
  Result := Nil;

  // Get the first node of the tree..
  ParentNode := VT.GetFirst;

  // Loop thru the parent nodes.
  for I := 0 to VT.RootNodeCount - 1 do
  begin
    // Get …
Run Code Online (Sandbox Code Playgroud)

delphi checkbox duplicates virtualtreeview

2
推荐指数
1
解决办法
4616
查看次数

将数据写入PVirtualNode而不手动设置每个字段值

假设我有这个节点数据记录:

Type
  PPerson = ^TPerson;
  TPerson = record
   Name: String;
   Age: Integer;
   SomeBool: Boolean;
  end;
Run Code Online (Sandbox Code Playgroud)

要填充我的VirtualStringTree,我会这样做:

Procedure AddToTree(Person: TPerson);
Var
 Node: PVirtualNode;
 Data: PPerson;
Begin
 Node := VT.AddChild(nil);
 Data := VT.GetNodeData(Node);
 Data.Name := Person.Name;
 Data.Age  := Person.Age;
 Data.SomeBool := Person.SomeBool;
End;

Procedure TMyForm.MyButtonClick(Sender: TObject);
Var
 Person: TPerson;
Begin
 Person.Name := 'Jeff';
 Person.Age := 16;
 Person.SomeBool := False;
 AddToTree(Person);

End:
Run Code Online (Sandbox Code Playgroud)

现在,虽然这很好用,但我想简化它,所以每当我向记录添加新字段时,我都不会修改AddToTree方法.

所以我尝试了这个:

Procedure AddToTree(Person: TPerson);
Begin
 VT.AddChild(nil,@Person);
End;
Run Code Online (Sandbox Code Playgroud)

这个编译,似乎PVirtualNode没有得到数据,因为我的VT没有显示任何东西,并且当打破OnGetText事件时,我看到变量是空的.

我究竟做错了什么?:)

delphi pointers virtualtreeview tvirtualstringtree

2
推荐指数
1
解决办法
941
查看次数

虚拟树视图(C++ Builder)2图标在Windows 7上重叠,但在XP上不重叠

我在Windows 7上遇到了VirtualTreeView组件的问题.我添加了一个TVirtualStringTree并使用OnGetImageIndex事件来分配ImageIndex,它始终处于调试器非零值.

VirtualStringTree使用带有16x16图标的TImageList作为Images属性.

在Windows XP上它可以正常工作,在Windows 7上,它在正常图标的顶部与TImageList的索引为0的图标重叠.我在Windows 7上运行与在XP上相同的程序,因此代码是相同的,但绘图是不同的.

此图片说明了问题:

virtualtreeview问题http://i42.tinypic.com/6sb8ko.jpg

灰色三角形图标的索引为0,文件夹图标的索引为5.

这是VirtualStringTree中的错误吗?我可以以某种方式避免这个吗?

我正在使用存储库中的最新VirtualTreeView版本.

delphi c++builder virtualtreeview

2
推荐指数
1
解决办法
809
查看次数

VirtualStringTree OnNodeRightClick

我正在寻找一个程序或一些东西,如果我右键单击一个节点(或通常在VirtualStringTree上)被解雇

我有以下场景:

  • 我的VST接近列表视图.
  • 我只能使用鼠标多选择根节点(按住鼠标按钮并移动鼠标)
  • 如果我点击任何子节点(右或左) - 它被选中(+ [VSelected]状态)
  • 如果我右键单击根节点,它会自动选择并打开弹出菜单.

现在我希望为我的所有子节点(仅当它们被选中)有一个不同的弹出菜单(1个常用).

希望你能理解我的意思,谢谢你的帮助.

delphi delphi-7 virtualtreeview tvirtualstringtree

2
推荐指数
1
解决办法
2673
查看次数

虚拟TreeView提示未显示

我已将ShowHint设置为true,将HintMode设置为hmToolTip,但是当我将光标悬停在控件上时,我的OnGetHint()事件处理程序甚至没有断点.

知道我做错了什么吗?

.


另外,有没有人对良好的文档,教程等有任何提示?例如,我在哪里可以找到HintMode属性的各种值实际意味着什么?

网站上的文档非常不完整,"使用其他资源如新闻组或Delphi Gems留言板查找说明"这一短语在HMTL帮助中发生了789次 - 通常我真正需要帮助的地方: - /

[更新]事实上,如果记录在案,我会愿意使用另一个组件,即使是少一个组件.

谢谢 !

delphi virtualtreeview

2
推荐指数
1
解决办法
2507
查看次数

保存VirtualStringTree节点数据

我正在尝试将项目从D6移动到D-XE3.使用VirtualStringTree版本5.10在OnSaveNode和OnLoadEvents中保存和加载树数据时,我得到了垃圾.我可能没有正确处理Unicode,但我可能还有其他一些无知:

procedure TfMain.vstGridSaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Stream: TStream);
var
  Data: PStkData;
begin
  Data := Sender.GetNodeData(Node);

  //  Owned: boolean;
  Stream.Write(Data.Owned, SizeOf(boolean) );

  //  Symbol: string;
  Stream.Write(PChar(Data.Symbol)^, Length(Data.Symbol) * SizeOf(Char));

  //  AvgTarget: currency;
  //Stream.Write(Data.AvgTarget, SizeOf(currency));

  //  PE: double;
  Stream.Write(Data.PE, SizeOf(double));
end;

procedure TfMain.vstGridLoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Stream: TStream);
var
  Data: PStkData;
begin
  Data := Sender.GetNodeData(Node);

  //Owned: boolean;
  Stream.Read(Data.Owned, SizeOf(boolean));

  //Symbol: string;
  Stream.Read(PChar(Data.Symbol)^, Length(Data.Symbol) * SizeOf(Char));

  //AvgTarget: currency;
  Stream.Read(Data.AvgTarget, SizeOf(currency));

  //PE: double;
  Stream.Read(Data.PE, SizeOf(double));
end;
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

delphi unicode virtualtreeview tvirtualstringtree delphi-xe3

2
推荐指数
1
解决办法
637
查看次数

VirtualTreeview启用和禁用列

我有一个VirtualTreeView,它最初隐藏了一些列(coVisible不存在).

启用它们(添加coVisible到列选项)后会发生奇怪的事情 - 列出现但与前一列重叠.我可以通过将宽度更改为1像素更小,然后返回到列的原始宽度来强制重新绘制,然后正确显示列,从而解决问题.

除了添加coVisible以使列重新正确显示之外,还有什么我需要做的吗?

delphi virtualtreeview

2
推荐指数
1
解决办法
992
查看次数

有没有办法以编程方式选择VirtualTreeView中的节点?

我需要以编程方式在VirtualTreeview中选择一个特定节点,但我找不到任何方法.有人可以帮忙解决问题吗?

delphi virtualtreeview

2
推荐指数
1
解决办法
2054
查看次数

TVirtualStringTree - 设置列单元/节点对齐

我有一个将Header.Column设置为taLeftJustify(默认)的VirtualStringTree .

有没有办法设置该列的单元格/节点,taRightJustify以便节点将向右对齐,但标题列文本将向左对齐?

这是我想要的结果(在第1栏):

在此输入图像描述

我使用的是相当旧的VT版本4.5.5

delphi virtualtreeview tvirtualstringtree

2
推荐指数
1
解决办法
456
查看次数