Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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]] | + | |