Bonjour à tous,
Dans un tTreeView (VCL) sur lequel j'ai ajouté des CheckBox, je cherche à répercuter le changement d'un noeud vers ses descendants.
Mon code fonctionne presque sauf que le nœud sélectionné correspond toujours à celui en surbrillance mais pas à celui qui vient d'être coché ou décoché.
Y a-t-il une solution pour récupérer le nœud modifié ? Utilisation du Handle ?
Merci par avance...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 function IsChecked(Node: tTreeNode): Boolean; var tvItem: tTvItem; begin tvItem.mask := tvIf_State; tvItem.hItem := Node.ItemId; TreeView_GetItem(Node.TreeView.Handle, tvItem); result := tvItem.state and tvIs_Checked > 0; end; procedure CheckTvNode(Node: tTreeNode; bState: Boolean); var tvItem: tTvItem; begin tvItem.mask := tvIf_State; tvItem.StateMask := tvIs_StateImageMask; tvItem.hItem := Node.ItemId; if bState then tvItem.state := tvIs_Checked else tvItem.state := tvIs_unChecked; TreeView_SetItem(Node.TreeView.Handle, tvItem); end; procedure TfrmMain.tvDirectoryClick(Sender: TObject); var pDirectoryTmp: pDirectory; NodeTmp: tTreeNode; bChecked: Boolean; { ---------------------------------------------- } procedure UpdateChild(NodeAct: tTreeNode); begin NodeAct := NodeAct.getFirstChild; if NodeAct <> nil then repeat CheckTvNode(NodeAct, bChecked); UpdateChild(NodeAct); NodeAct := NodeAct.GetNextSibling; until NodeAct = nil; end; { ---------------------------------------------- } begin if tvDirectory.Selected.Data = nil then exit; NodeTmp := tvDirectory.Selected; pDirectoryTmp := NodeTmp.Data; bChecked := IsChecked(tvDirectory.Selected); pDirectoryTmp.edSelected := bChecked; UpdateChild(NodeTmp); // Child ? tvDirectory.Refresh; end;






Répondre avec citation


Partager