2016-07-28 25 views
3

目前我有这样的代码一些节点添加到VST如何在Virtualstringtree中添加无可见节点?

function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode; AObject: TDATArecord): PVirtualNode; 
var 
    Data: PUserData; 
begin 
    Result := AVST.AddChild(ANode); 
    Data := AVST.GetNodeData(Result); 
    AVST.ValidateNode(Result, false); 
    Data^.FObject := AObject; 
end; 

//adding node 
VDT1.BeginUpdate; 
try 
    DATArecord.name := 'nodename'; 
    DATArecord.Visible:= False; 
    AddVSTStructure(VDT1, nil, DATArecord); 
finally 
    VDT1.EndUpdate; 
end; 

我想在非可视状态下添加节点,我的意思是完全不可见。

我知道我可以使用VDT1.IsVisible[Node] := boolean;加入之后设置节点的知名度,但我想显示考虑到我添加设置为DATArecord.Visible:= False;

所以记录在树中不可见之前设置它,如果Datarecord.visible等于true,则添加具有可见状态的节点。如果其为false,则添加具有不可见状态的节点,我该怎么做?

+3

什么是阻止你设置'AVST.IsVisible [结果]:= AObject.Visible;'立即创建节点后?由于您在创建节点时位于'(开始/结束)更新'对内,因此用户不会看到添加的节点。 –

+0

@RemyLebeau哇,这很容易,我真的开始相信我真的很愚蠢,甚至智力迟钝。非常感谢你,这很简单 –

回答

5

只需设置节点的IsVisible属性创建节点后,立即:

Result := AVST.AddChild(ANode); 
AVST.IsVisible[Result] := AObject.Visible; // <-- add this 

的用户不会看到添加的节点,因为AddVSTStructure()被称为(Begin/End)Update对里面的,所以加不执行任何屏幕更新。

相关问题