Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:lazarus:components:tvirtualtreeview:tvirtualtreeview [13/07/2020 16:44]
thierry [GetFirstSelected]
prog:lazarus:components:tvirtualtreeview:tvirtualtreeview [07/05/2023 15:12] (Version actuelle)
thierry
Ligne 103: Ligne 103:
  
 <code delphi> <code delphi>
 +  { Expand un Node }
    ​VSTMain.Expanded[FRootNode]:​=true;​    ​VSTMain.Expanded[FRootNode]:​=true;​
 +   { Savoir si un Node est expanded }
 +   ​ExpBool:​=VSTMain.Expanded[FRootNode];​
 </​code>​ </​code>​
 === Tout  === === Tout  ===
Ligne 134: Ligne 137:
   * [[https://​documentation.help/​VirtualTreeview/​TBaseVirtualTree_Sort@PVirtualNode@TColumnIndex@TSortDirection@Boolean.html|Procédure SORT @Doc Officielle]]   * [[https://​documentation.help/​VirtualTreeview/​TBaseVirtualTree_Sort@PVirtualNode@TColumnIndex@TSortDirection@Boolean.html|Procédure SORT @Doc Officielle]]
   * [[https://​documentation.help/​VirtualTreeview/​TBaseVirtualTree_OnCompareNodes.html|OnCompareNode @DocOfficielle]]   * [[https://​documentation.help/​VirtualTreeview/​TBaseVirtualTree_OnCompareNodes.html|OnCompareNode @DocOfficielle]]
- 
-==== Selection ==== 
-=== GetFirstSelected === 
-<code delphi> 
-function TForm1.GetSelectedMarker:​ TMarker; 
-var 
-   ​pNode:​ PVirtualNode;​ 
-   ​pData:​ PVSTMarkData;​ 
-begin 
-   pNode := VSTMark.GetFirstSelected;​ 
-   if assigned(pNode) then 
-   begin 
-      pData  := VSTMark.GetNodeData(pNode);​ 
-      Result := pData^.Marker;​ 
-   end else 
-      Result := nil; 
-end; 
-</​code>​ 
-=== Séléction dans un TNodeArray === 
-<code delphi> 
-var 
-   ​vI: ​     integer; 
-   ​vNodes: ​ TNodeArray; 
-begin 
-   ​vNodes ​ := TVirtualStringTree(Source).GetSortedSelection(True);​ 
-   for vI := 0 to length(vNodes) - 1 do 
-   ... 
-end;        
-</​code>​ 
- 
  
  
Ligne 180: Ligne 153:
    ​end; ​          ​end; ​      
 </​code>​ </​code>​
-==== Parcourir un VST ==== 
-=== Parcourir un méme niveau === 
- 
-<code delphi Version courte> 
-var 
-   Data: PTreeData; 
-   Node: PVirtualNode;​ 
-begin 
-      Node := VST.GetFirst;​ 
-      while Assigned(Node) do 
-      begin 
-         Data := VST.GetNodeData(Node);​ 
-        Node := VST.GetNextSibling(Node);​ 
-      end; 
-end; 
- 
-</​code>​ 
- 
-<code delphi version détaillée>​ 
-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; 
- 
-</​code>​ 
-=== 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. 
-<code delphi> 
-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; 
- 
-</​code>​ 
- 
- 
- 
- 
 ==== Déstruction du VST ==== ==== Déstruction du VST ====
 === OnFreeNode === === OnFreeNode ===