2016-07-28 20 views
3

Derzeit ich diesen Code haben einige Knoten zu einem VSTWie fügt man keinen sichtbaren Knoten in Virtualstringtree hinzu?

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; 

I-Knoten im nicht-sichtbaren Zustand hinzufügen möchten hinzufügen, meine ich völlig unsichtbar.

Ich weiß, dass ich die Sichtbarkeit des Knotens mit VDT1.IsVisible[Node] := boolean; es nach dem Hinzufügen festlegen Aber ich möchte es einrichten nicht sichtbar, bevor sie im Baum zeigt den Datensatz bedenkt, dass ich hinzufügen, ist auf DATArecord.Visible:= False;

Also, wenn Datarecord.visible ist gleich wahr, füge den Knoten mit sichtbarem Status hinzu. Wenn es falsch ist, füge den Knoten mit nicht sichtbarem Zustand hinzu, wie kann ich das tun?

+3

Was hält Sie davon ab, 'AVST.IsVisible [Result]: = AObject.Visible;' sofort nach dem Erstellen des Knotens zu setzen? Dem Benutzer wird nicht angezeigt, dass der Knoten hinzugefügt wurde, da Sie sich zum Zeitpunkt der Erstellung des Knotens im Paar "(Begin/End) Update" befinden. –

+0

@RemyLebeau wow so einfach, ich fange wirklich an zu glauben, dass ich wirklich dumm oder sogar geistig zurückgeblieben bin. Vielen Dank, das war sehr einfach –

Antwort

5

einfach die IsVisible Eigenschaft des Knotens gesetzt, sofort nachdem Sie den Knoten zu erstellen:

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

Der Benutzer wird nicht der Knoten zu sehen, da AddVSTStructure() hinzugefügt innerhalb des (Begin/End)Update Paar genannt wird, so das Add nicht durchführt jedes Bildschirm-Update.