--- Soumis par Dev Ashish ---
Permettre la sélection d'une branche de Treeview
Le contrôle TreeView inclus avec l'ODE ne permet pas de choisir toute une branche de par la propriété FullRowSelect, contrairement à son cousin VB6: si FullRowSelect est vrai, tout le reste de la branche est choisi avec le noeud.
On peut cependant utiliser la fonction API SetWindowLong pour spécifier le style additionnnel du TreeView, nommément TVS_FULLROWSELECT, ce qui nous redonne la fonctionnalité de FullRowSelect.
Inclus, deux fonctions qui permettent de sélectionner le comportement désiré pour un TreeView.
'*************** Code Start *****************
'
'Version 4.71 ou plus récentre de comctl32
'Permettre la sélection de toute la branche dans la vue de l'arbre
Private Const TVS_FULLROWSELECT = &H1000
'Recupère le style de la fenêtre
Private Const GWL_STYLE = (-16)
Private Declare Function apiGetWindowLong Lib "user32" _
Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) _
As Long
Private Declare Function apiSetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) _
As Long
Function fTvwFullRowSelect(tvw As Control) As Boolean
'Amorce le comportement de sélection de toute la branche d'un treeview
'Le contrôle Treeview fourni avec l'ODE possède
'déjà un hWnd, inutile donc de passer par un GetFocus
Dim lngStyle As Long
'Lecture du comportement actuel
lngStyle = apiGetWindowLong(tvw.hWnd, GWL_STYLE)
'on "ajoute" notre style
lngStyle = lngStyle Or TVS_FULLROWSELECT
'qui deviendra le nouveau style
fTvwFullRowSelect = (Not apiSetWindowLong(tvw.hWnd, _
GWL_STYLE, lngStyle) = 0)
End Function
Function fResetTvwFullRowSelect(tvw As Control) As Boolean
'Amorce le comportement par défaut
Dim lngStyle As Long
'Lecture du comportement actuel
lngStyle = apiGetWindowLong(tvw.hWnd, GWL_STYLE)
'enlever le comportement de sélection par branche, si présent
lngStyle = lngStyle And Not TVS_FULLROWSELECT
'qui deviendra le nouveau comportement
fResetTvwFullRowSelect = (Not apiSetWindowLong(tvw.hWnd, _
GWL_STYLE, lngStyle) = 0)
End Function
'*************** Code End *****************