====== Parcourir les noeud d'un Virtual Tree View ====== ===== Parcourir un méme niveau ===== var Data: PTreeData; Node: PVirtualNode; begin Node := VST.GetFirst; while Assigned(Node) do begin Data := VST.GetNodeData(Node); Node := VST.GetNextSibling(Node); end; end; var Data: PTreeData; Node: PVirtualNode; begin VST.ClearSelection; if assigned(ATpl) then begin Node := VST.GetFirst; while Assigned(Node) do begin Data := VST.GetNodeData(Node); if Data^.Style=AValue then begin VST.Selected[Node]:=true; break; end else Node := VST.GetNextSibling(Node); end; end; end; ===== Parcourir tous les nœuds par Itération ===== Dans cet exemple on déclare un fonction ''VSTFindParentNode(AUID: TUniqId)'' qui doit retourner le Node ayant pour ID ''AUID''.\\ Cette function utilise ''IterateSubtree'' du VST pour chercher le noeud.\\ La function appelé lors de cette itération est ''VSTIterationForFindParentNode''.\\ Les données utiles pour la recherche et le résultat sont stockées dans un Record ''PIterationDataForFindParentNode'' transmis via le paramétre ''data: pointer'' de l'itération. type TVSTMarkType = (vmtMarker, vmtGroup); TVSTMarkData = packed record Obj: TObject; Typ: TVSTMarkType; UID: TUniqID; end; PVSTMarkData = ^TVSTMarkData; TIterationDataForFindParentNode = packed record UIDToFind: TUniqID; Result: PVirtualNode; end; PIterationDataForFindParentNode = ^TIterationDataForFindParentNode; ........................ procedure TFrameMarkersManager.VSTIterationForFindParentNode(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: boolean); var pData: PVSTMarkData; pIterationData: PIterationDataForFindParentNode; begin { On récupére les données a chercher, transmise via le pointer Data } pIterationData:=PIterationDataForFindParentNode(Data); pData:=Sender.GetNodeData(Node); { Si le Node est un Group et que l'UID est le bon... } if (pData^.Typ=vmtGroup) and (pData^.UID=pIterationData^.UIDToFind) then begin { On stock le résultat dans le Record transmis par le pointer Data } pIterationData^.Result:=Node; { On arrete la recherche } Abort:=true; end; end; function TFrameMarkersManager.VSTFindParentNode(AUID: TUniqId): PVirtualNode; var pIterationData: PIterationDataForFindParentNode; begin new(pIterationData); pIterationData^.Result:=nil; // Ici sera stocké le résultat par la procedure d'itération pIterationData^.UIDToFind:=AUID; // Le UID a chercher VSTMark.IterateSubtree(nil, @VSTIterationForFindParentNode,pIterationData); Result:=pIterationData^.Result; dispose(pIterationData); end;