Différences

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

Lien vers cette vue comparative

Prochaine révision
Révision précédente
prog:lazarus:components:tvirtualtreeview:node_affichage [13/03/2023 18:25]
thierry créée
prog:lazarus:components:tvirtualtreeview:node_affichage [13/03/2023 18:28] (Version actuelle)
thierry [Sources et Ressources]
Ligne 1: Ligne 1:
-====== ​Actions de BASE ====== +====== ​Affichage d'un Node ======
-===== Fonctionnement ===== +
-==== Définition des données affichée ​====+
  
-Les TVirtualTrees contiennent un ensemble de **Node** (de type PVirtualNode). +===== Affichage du texte du noeud =====
- +
-Chaque **Node** contient un membre **Data** TVirtualNode.Data (''​Data:​ record end;''​) +
- +
-Ce **Data** contient la donnée a gérer pour ce nœud.\\ +
-En general la donnée est un record qui peut contenir n'​importe quoi , par exemple... +
-<code delphi>​ +
-TTreeData ​record +
-      Text: String; +
-      URL: string[255];​ +
-      ImageIndex: integer; +
-   ​end; ​  +
- +
-PTreeData = ^TTreeData;​ +
-</​code> ​  +
-On déclare aussi un type pointer vers TTreeData (''​PTreeData''​) qui nous sera utile plus tard... +
-==== Initialisation ==== +
-  +
-   Il faut initialiser le TVirtualTree en lui disant la taille des noeuds grace a **NodeDataSize** +
-<code delphi>​ +
-procedure TForm1.FormCreate(Sender:​ TObject); +
-begin +
-   ​VSTMain.NodeDataSize := SizeOf(TTreeData);​ +
-end; +
-</​code>​ +
-<note warning>​Notez bien que c'est SizeOf(**T**TreeData) et **NON** <​del>​SizeOf(**P**TreeData)</​del>​ \\  +
-Sinon ça bug dans tous les sens...</​note>​ +
- +
-==== Ajout d'un Noeud ==== +
- +
- +
-Pour ajouter un noeud :  +
-<code delphi>​ +
-procedure TForm1.FormCreate(Sender:​ TObject); +
-var +
-   ​pNode:​ PVirtualNode;​ +
-   ​pData:​ PTreeData;​ +
-begin +
-   ​VSTMain.BeginUpdate;​ +
-    +
-   pNode := VSTMain.AddChild(nil);​ +
-   pData := VSTMain.GetNodeData(pNode);​ +
-   ​pData^.Text := '​root';​ +
-    +
-   ​VSTMain.EndUpdate;​ +
-    +
-end; +
-</​code>​ +
-==== Affichage d'un Noeud ==== +
-=== Affichage du texte du noeud ===+
 Lors du dessin du composant, le TVirtualTree se sert de l'​evenement ''​OnGetText''​ pour recuperer le texte a afficher. Lors du dessin du composant, le TVirtualTree se sert de l'​evenement ''​OnGetText''​ pour recuperer le texte a afficher.
 <code delphi> <code delphi>
Ligne 69: Ligne 18:
 end; end;
 </​code>​ </​code>​
-=== Affichage des images/​icones ===+===== Affichage des images/​icones ​=====
 On peut mettre deux images avant le texte du noeud. On peut mettre deux images avant le texte du noeud.
   - L'​image "​Normale",​ dont le ''​TImageList''​ sera stocké dans la property ''​images''​ et la largeur définie dans la propety ''​imagesWidth''​.   - L'​image "​Normale",​ dont le ''​TImageList''​ sera stocké dans la property ''​images''​ et la largeur définie dans la propety ''​imagesWidth''​.
Ligne 102: Ligne 51:
  
  
- +====== Sources et Ressources ======
- +
-==== Modifications ==== +
-=== BeginUpdate / EndUpdate === +
- +
-Lorsque l'on met a jour un VST, il est bon pour l'​affichage et la rapidité d'​entourer ces mises a jour par un ''​BeginUpdate''​ et un ''​EndUpdate''​. +
-<code delphi>​ +
-   ​VST.BeginUpdate;​ +
-   try +
-     ... +
-   ​finally +
-     ​VST.EndUpdate;​ +
-   ​end; ​       +
-</​code>​ +
-==== Déstruction du VST ==== +
-=== OnFreeNode === +
-<note note>​J'​ai eu un pb de MemoryLeak avec un VST que j'ai résolu de la façon suivante</​note>​ +
-<code delphi>​ +
-procedure TForm1.VSTMainFreeNode(Sender:​ TBaseVirtualTree;​ Node: PVirtualNode);​ +
-var +
-   Data: PTreeData;​ +
-begin +
-   Data := VSTMain.GetNodeData(Node);​ +
-   ​Finalize(Data^);​ +
-end; +
-</​code>​ +
-On en parle ici :​[[https://​www.remkoweijnen.nl/​blog/​2010/​06/​09/​memory-leaks-when-using-virtual-treeview-component/​]] +
- +
-Plus d'​infos sur ''​Finalize()''​ : [[https://​www.freepascal.org/​docs-html/​rtl/​system/​finalize.html]] +
- +
-On voit aussi... +
-<code delphi>​ +
-procedure TForm1.VSTMainFreeNode(Sender:​ TBaseVirtualTree;​ Node: PVirtualNode);​ +
-var +
-   Data: PTreeData;​ +
-begin +
-   Data := VSTMain.GetNodeData(Node);​ +
-   ​Data^.Text:​='';​ +
-   ​Data^.URL:​='';​ +
-end; +
-</​code>​ +
- +
- +
- +
- +
-===== Sources et Ressources ===== +
-  * [[https://​jlelong.developpez.com/​articles/​virtualtreeview/​]] +
-  * [[https://​documentation.help/​VirtualTreeview/​$Main.html]] +
-  * [[https://​wiki.freepascal.org/​VirtualTreeview_Example_for_Lazarus/​fr]] +