Make your own free website on Tripod.com

Home
Home

--- Soumis par  Dev Ashish ---

Permettre la sélection d'une ligne de ListView

    Le contrôle de vue par list, ListView, fourni avec l'ODE ne permet pas de choisir toute une ligne, contrairement à son cousin fourni avec VB6, où la propriété FullRowSelect vous permet accessoirement de choisir toute la ligne lorsqu'un item de la ligne est choisi.

    En utilisatn la fonction API  SendMessage, on peut envoyer le message LVM_SETEXTENDEDLISTVIEWSTYLE, avec lParam assigné à  True, vers la fenêtre du ListView, ce qui amorce la propriété FullRowSelect. Pour réablir le comportement initial, on utilise le même message, mais cette fois, avec lParam assingé à False.

    Voici donc deux fonction pour "set" et "clear" le comportement en titre, pour un contrôle  ListView.

'*************** Code Start *****************
'
Private Const LVM_FIRST As Long = &H1000

'Quand un item de la ligne est choisi, l'item et tous ceux de la même ligne sont également en mode choisis
'  Version 4.70 ou plus récente de comctl32.dll
'
'  Windows NT: Requiert version 5.0 ou plus récente (or version 4.0
'                                          avec Internet Explorer 3.0 ou plus récent).
'  Windows: Requiert Windows 98 (or Windows 95 avec _
'                                         Internet Explorer 3.0 ou plus tard).
Private Const LVS_EX_FULLROWSELECT As Long = &H20

'Utiliser les styles étendus dans un contrôle de liste ( list view )
'dwExMask permet de modifier un ou plusieurs styles sans avoir à chager, au 
'préalable, les styles existants. Par exemple, si on utilise
'LVS_EX_FULLROWSELECT pour dwExMask et 0 for dwExStyle, le style
'LVS_EX_FULLROWSELECT sera mis à 0, mais tous les autres demeurent
'styles demeurent inchangés
Private Const LVM_SETEXTENDEDLISTVIEWSTYLE As Long = LVM_FIRST + 54

'Récupère les styles étendus en usage dans le contrôle
Private Const LVM_GETEXTENDEDLISTVIEWSTYLE As Long = LVM_FIRST + 55

Private Declare Function apiSendMessageLong Lib "user32" _
   Alias "SendMessageA" _
   (ByVal hwnd As Long, _
   ByVal Msg As Long, _
   ByVal wParam As Long, _
   ByVal lParam As Long) _
   As Long

Function fLVFullRowSelect(LV As Control) As Boolean
'Choisir le mode FullRowSelect pour le  ListView
'
Dim lngStyle As Long

   'Charge le style actuellement en vigueur
   lngStyle = apiSendMessageLong(LV.hwnd, _
                                       LVM_GETEXTENDEDLISTVIEWSTYLE, _
                                       0&, 0&)
                                       
   If lngStyle And LVS_EX_FULLROWSELECT Then
      'Listview est déjà dans le mode désiré
      fLVFullRowSelect = True
   Else
      'assigné à True
      fLVFullRowSelect = (apiSendMessageLong(LV.hwnd, _
                                       LVM_SETEXTENDEDLISTVIEWSTYLE, _
                                       LVS_EX_FULLROWSELECT, True) = 0)
   End If
End Function

Function fResetLVFullRowSelect(LV As Control) As Boolean
' Enlever FullRowSelect pour un listview
'
Dim lngStyle As Long

   'Charger le style en vigueur
   lngStyle = apiSendMessageLong(LV.hwnd, _
                                       LVM_GETEXTENDEDLISTVIEWSTYLE, _
                                       0&, 0&)

   If lngStyle And LVS_EX_FULLROWSELECT Then
      'Si actuellement en fonction, l'enlever
      fResetLVFullRowSelect = Not (apiSendMessageLong(LV.hwnd, _
                                             LVM_SETEXTENDEDLISTVIEWSTYLE, _
                                             LVS_EX_FULLROWSELECT, 0) = 0)
   Else
      'déjà hors fonction.
      fResetLVFullRowSelect = True
   End If
End Function
'*************** Code End *****************