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:base [13/03/2023 18:29]
thierry [Affichage d'un Noeud]
prog:lazarus:components:tvirtualtreeview:base [13/03/2023 18:52] (Version actuelle)
thierry [Créer les colonnes à afficher]
Ligne 1: Ligne 1:
 ====== Actions de BASE ====== ====== Actions de BASE ======
-===== Fonctionnement ===== +Avant toute utilisation d'un VST on doit faire : 
-==== Définition des données affichée ====+  * Définir les données a afficher. 
 +  * Initialiser le ''​NodeDataSize''​ avec la taille des données à afficher. 
 +  * Définir les Columns à afficher. 
 +  * Définir ''​OnGetText''​ pour pouvoir afficher le texte du Node. 
 +  * Définir ''​OnFreeNode''​ pour dire quoi faire quand on efface un Node. 
 + 
 +===== Définition des données ​à affichée ​=====
  
 Les TVirtualTrees contiennent un ensemble de **Node** (de type PVirtualNode). Les TVirtualTrees contiennent un ensemble de **Node** (de type PVirtualNode).
Ligne 19: Ligne 25:
 </​code>  ​ </​code>  ​
 On déclare aussi un type pointer vers TTreeData (''​PTreeData''​) qui nous sera utile plus tard... On déclare aussi un type pointer vers TTreeData (''​PTreeData''​) qui nous sera utile plus tard...
-==== Initialisation ​====+===== Définir NodeDataSize =====
    
    Il faut initialiser le TVirtualTree en lui disant la taille des noeuds grace a **NodeDataSize**    Il faut initialiser le TVirtualTree en lui disant la taille des noeuds grace a **NodeDataSize**
Ligne 31: Ligne 37:
 Sinon ça bug dans tous les sens...</​note>​ Sinon ça bug dans tous les sens...</​note>​
  
-==== Ajout d'un Noeud ====+===== Créer les colonnes à afficher ===== 
 + 
 +Avec le menu contextuel sur le VST, choisir ''​Edit Columns...''​ 
 + 
 +{{:​prog:​lazarus:​components:​tvirtualtreeview:​columns.jpg|}} 
 + 
 +Ensuite on définit ''​TVirtualTree.Header.Options.hoVisible''​ pour les afficher sur le VST (si vous voulez les afficher) 
 + 
 +{{:​prog:​lazarus:​components:​tvirtualtreeview:​col2.jpg|}} 
 + 
 + 
 +===== Ajout d'un Noeud =====
  
  
Ligne 51: Ligne 68:
 end; end;
 </​code>​ </​code>​
-==== OnGetText : Affichage d'un Noeud ====+===== OnGetText : Affichage d'un 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.
 +
 +Plus d'​infos sur l'​affichage -> [[prog:​lazarus:​components:​tvirtualtreeview:​node_affichage]]
 <code delphi> <code delphi>
 procedure TForm1.VSTMainGetText(Sender:​ TBaseVirtualTree;​ Node: PVirtualNode;​ procedure TForm1.VSTMainGetText(Sender:​ TBaseVirtualTree;​ Node: PVirtualNode;​
Ligne 69: Ligne 88:
 end; end;
 </​code>​ </​code>​
-=== Affichage des images/​icones === 
-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 "​State",​ dont le ''​TImageList''​ sera stocké dans la property ''​StateImages''​ et la largeur définie dans la propety ''​StateImagesWidth''​. 
  
-Lorsque le VST veux récupérer l'​index de l'​image à afficher, le paramètre ''​Kind''​ contient l'​information du type d'​image qu'il souhaite: 
-  * ''​ikNormal''​ : L'​image "​Normale"​ 
-  * ''​ikSelected''​ : L'​image "​Normale"​ quand la ligne est séléctionnée 
-  * ''​ikState''​ : L'​image "​State"​ 
-  * ''​ikOverlay''​ : ..... 
  
-Le paramètre ''​Column''​ contient l'​index de la colonne pour laquelle il veut l'​ImageIndex. 
-<code delphi> 
-procedure TFrameVSTDisks.VSTGetImageIndex(Sender:​ TBaseVirtualTree;​ Node: PVirtualNode;​ Kind: TVTImageKind;​ Column: TColumnIndex;​ var Ghosted: boolean; var ImageIndex: integer); 
-var 
-   ​pData:​ PTreeData; 
-begin 
-   ​pData ​     := VST.GetNodeData(Node);​ 
-   ​ImageIndex := -1; 
-   case Column of 
-      C_COL_DEVICE:​ case Kind of 
-            ikState: ImageIndex ​ := -1; 
-            ikNormal,​ikSelected:​ ImageIndex := pData^.Img; 
-         end; 
-      C_COL_SMART:​ case Kind of 
-            ikState: ImageIndex ​ := -1; 
-            ikNormal,​ikSelected:​ ImageIndex := pData^.SmartImg;​ 
-         end; 
-   end; 
-end; 
-</​code>​ 
  
  
- +===== OnFreeNode ​=====
- +
-==== 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>​ <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> <code delphi>
Ligne 147: Ligne 122:
  
  
-===== Sources et Ressources =====+====== Sources et Ressources ​======
   * [[https://​jlelong.developpez.com/​articles/​virtualtreeview/​]]   * [[https://​jlelong.developpez.com/​articles/​virtualtreeview/​]]
   * [[https://​documentation.help/​VirtualTreeview/​$Main.html]]   * [[https://​documentation.help/​VirtualTreeview/​$Main.html]]