Sign in Join
Wiki copytemporary

TTreeView/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TTreeView/fr

OldNewLine
1+Un **TTreeView** ![](/wiki-images/a/a3/Ttreeview.png) est un contrôle graphique qui présente une vue hiérarchique d'information. Chaque élément (*Item*) peut avoir des sous-éléments (arborescence).
2+
3+Un élément peut être expansé pour révéler ses sous-éléments, s'il y en a, et contracté pour cacher les sous-éléments.
4+
5+# Ajout d'un nouvel élément par code
6+
7+Utilisez TTreeView.Items.AddChild ou AddChildObject.
8+
9+# Création d'un TreeView qui charge des éléments seulement lors de l'expansion
10+
11+Pour ajouter le symbole d'expansion à un nœud sans sous-éléments, utilisez :
12+
13+``` pascal
14+MyNode.HasChildren := True;
15+```
16+
17+Puis définissez un gestionnaire pour l'événement OnExpanding. Dans celui-ci, vous devriez retourner si l'expansion peut alors se faire ou non et dans l'affirmative vous devriez ajouter les sous-éléments au nœud. Si l'expansion ne peut pas se faire, le symbole d'expansion sera alors retiré automatiquement même si vous avez défini avant HasChildren à *True*.
18+
19+# Un court exemple d'utilisation de TTreeview
20+
21+Voici un exemple vite fait - testé sur Lazarus 0.9.26 sur Windows :
22+
23+Créez une nouvelle application. Sur le Form1 ajoutez un TreeView vide, un button1 intitulé "Add Child" et un button2 intitulé "Delete".
24+
25+Pour l'événement OnClick des boutons, affectez le code suivant, compilez et exécutez.
26+
27+``` pascal
28+procedure TForm1.Button1Click(Sender: TObject);
29+var
30+ i: integer;
31+ s: string;
32+begin
33+ // if there are no nodes, create a root node with a parent of nil
34+ if TreeView1.Items.Count = 0 then
35+ begin
36+ Treeview1.Items.Add (nil,'Root Node');
37+ exit;
38+ end;
39+
40+ // Set up a simple text for each new node - Node1 , Node2 etc
41+ i := TreeView1.Items.Count;
42+ s := 'Node ' + inttostr(i);
43+ //Add a new node to the currently selected node
44+ if TreeView1.Selected <> nil then
45+ Treeview1.Items.AddChild(Treeview1.Selected ,s);
46+end;
47+
48+procedure TForm1.Button2Click(Sender: TObject);
49+
50+ //A procedure to recursively delete nodes
51+ procedure DeleteNode(Node:TTreeNode);
52+ begin
53+ while Node.HasChildren do
54+ DeleteNode(node.GetLastChild);
55+ TreeView1.Items.Delete(Node) ;
56+ end;
57+
58+begin
59+ if TreeView1.Selected = nil then
60+ exit;
61+
62+ //if selected node has child nodes, first ask for confirmation
63+ if TreeView1.Selected.HasChildren then
64+ if messagedlg( 'Supprimer le noeud et tous ses enfants ?',mtConfirmation, [mbYes,mbNo],0 ) <> mrYes then
65+ exit;
66+ DeleteNode(TreeView1.Selected);
67+end;
68+```
69+
70+A l'exécution, le TreeView est vide. Si vous cliquez sur "Add Child", un nœud racine est créé. Après un élément enfant sera ajouté au noeud sélectionné en cliquant sur "Add Child".
71+
72+"Delete" supprimera le nœud actuellement sélectionné. Si il n'a pas d'enfant, il sera supprimé immédiatement mais s'il en a, il va d'abord demander.
73+
74+# Exemple d'utilisation de sélection multiple de nœud pour les sélections multiples de l'utilisateur
75+
76+Si vous sélectionnez votre composant TTreeview, allez dans l'objet d'objet et dans les sections d'options mettez *tvoAllowMultiSelect* à True. Ensuite, pour itérer sur les nœuds sélectionnés et obtenir les chemins des dossiers choisis ou des fichiers, l'exemple suivant peuplera les chemins à ces nœuds sélectionnés en texte dans un champ mémo :
77+
78+``` pascal
79+procedure TForm1.Button1Click(Sender: TObject);
80+var
81+ i: Integer;
82+begin
83+ if TreeView1.SelectionCount=0 then
84+ exit;
85+ Memo1.Lines.Clear;
86+ for i:=0 to TreeView1.SelectionCount-1 do
87+ Memo1.Lines.Add(TreeView1.Selections[i].GetTextPath);
88+end;
89+```
90+
91+# Libération des données de TreeNode
92+
93+Utilisez l'événement OnDeletion du TreeView pour libérer votre objet.
94+
95+``` pascal
96+procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
97+begin
98+ TMyObject(Node.Data).Free;
99+end;
100+```
101+
102+# Utilisation du Glisser/déposer (Drag and Drop) dans un TreeView
103+
104+Si vous voulez permettre des fonctions de Glisser/déposer dans votre TreeView, vous avez besoin de :
105+
106+1. Définir à *DmAutomatic*, la propriété **DragMode** de votre TreeView.
107+2. Créer un événement pour **OndragOver**.
108+
109+``` pascal
110+procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
111+begin
112+ Accept := true;
113+end;
114+```
115+
116+# Voir aussi
117+
118+- [[doc:/lcl/comctrls/ttreeview.html|Doc. TTreeView]]
119+- [[TListView/fr|TListView]]
120+- [[VirtualTreeview/fr|VirtualTreeview (composant non LCL)]]
121+
122+---
123+*From the Free Pascal wiki, page "TTreeView/fr", as it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history