我的应用程序将通过虚拟节点循环并检查其数据.我使用另一个表单来执行此操作比包含VirtualStringTree的表单.(我得到了我的理由;))
我的问题是:我如何将这些节点+他们的数据传递给我的其他形式的函数,然后能够循环通过节点(我知道如何循环,我只需要以我的其他形式提供节点) ).
此外,请注意,一旦显示Processing表单,就会销毁包含VirtualStringTree的表单!
我怎么能这样做?我正在考虑创建一个动态的VirtualStringTree,并以某种方式将节点从一棵树传递到另一棵树,但我会先问这里是否有更好的解决方案.:)
谢谢,杰夫.
我正在使用 Delphi XE3 和 Virtual TreeView。
我想用Virtual TreeView来实现一棵树,当点击“开始”按钮时,程序会递归搜索一个驱动器下的所有文件和文件夹,然后将它们一一添加到树中,就像Windows资源管理器一样。此外,应该有一个数字指示文件夹下的文件和子文件夹的数量,使用静态文本如下:
VirtualTreeView - 同一节点中不同颜色的文本
在我看来,我发现有时数字没有正确更新。
因此,每当文件/子文件夹的数量发生变化时,我认为可以通过以下方式刷新节点:
调用 tvItems.Change(PNode) 来更新节点。
调用 tvItems.InvalidateNode(PNode)。
调用 tvItems.RepaintNode(PNode)。
调用 tvItems.UpdateAction。
但是,1 是无法调用的受保护方法。2 和 3 都可以,但不知道哪个更适合更新。4 没有记录,不知道如何称呼它。
我需要向TVirtualStringTree插入一些新节点.我使用带有UserData参数的InsertNode方法.但树无法显示任何数据.如何获取GetText/FreeNode事件的用户数据?
TMyData = record
Name: string;
size: Integer;
end;
PMyData = ^TMyData;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
VirtualStringTree1.NodeDataSize := SizeOf(TMyData);
Randomize;
end;
procedure TForm2.Button1Click(Sender: TObject);
var
Data: PMyData;
Node: PVirtualNode;
begin
New(Data);
Data.Name := DateTimeToStr(now);
Data.size := Random(100);
Node := VirtualStringTree1.InsertNode(nil, amInsertAfter, Data);
end;
procedure TForm2.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree; Node:
PVirtualNode);
var
Data: PMyData;
begin
Data := Sender.GetNodeData(Node);
Data.Name := '';
end;
procedure TForm2.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node:
PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText:
WideString);
var
Data: PMyData; …Run Code Online (Sandbox Code Playgroud) 如何将所有节点从一个VirtualTreeView复制到另一个?我试过使用CopyTo函数,但数据是空的,为什么?数据包含对记录的引用(像往常一样).
我也尝试使用OnNodeCopying@Cosmin Prund在他现在删除的答案中建议的这个事件,但它崩溃了:
procedure TDataBaseForm.SourceTreeViewNodeCopying(Sender: TBaseVirtualTree;
Node, Target: PVirtualNode; var Allowed: Boolean);
var
SourceNodeData, DestNodeData: PNodeDataForCompare;
begin
SourceNodeData := Sender.GetNodeData(Node);
DestNodeData := VirtualStringTree1.GetNodeData(Target);
if Assigned(SourceNodeData) then
begin
DestNodeData^ := SourceNodeData^;
end;
Allowed := true;
end;
Run Code Online (Sandbox Code Playgroud) 移植到XE2,我有一个IsWinNT编译在7和Delphi 2009的行,从来没有给我们任何guff.
我不确定这样一个函数的目的是什么,但它是删除还是移动了?
什么是类似的功能?
我的坏,这是在Virtual Trees har.对不起伙计-1对我来说.房子里免费+ 1