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