Make your own free website on Tripod.com

Home
Home

--- 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 *****************