|  | 
          
            | APIs: Permettre la sélection d'une ligne de ListView | Author(s)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 utilisant 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. 
  
Private Const LVM_FIRST As Long = &H1000
Private Const LVS_EX_FULLROWSELECT As Long = &H20
Private Const LVM_SETEXTENDEDLISTVIEWSTYLE As Long = LVM_FIRST + 54
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
Dim lngStyle As Long
   lngStyle = apiSendMessageLong(LV.hwnd, _
                                       LVM_GETEXTENDEDLISTVIEWSTYLE, _
                                       0&, 0&)
                                       
   If lngStyle And LVS_EX_FULLROWSELECT Then
      fLVFullRowSelect = True
   Else
      fLVFullRowSelect = (apiSendMessageLong(LV.hwnd, _
                                       LVM_SETEXTENDEDLISTVIEWSTYLE, _
                                       LVS_EX_FULLROWSELECT, True) = 0)
   End If
End Function
Function fResetLVFullRowSelect(LV As Control) As Boolean
Dim lngStyle As Long
   lngStyle = apiSendMessageLong(LV.hwnd, _
                                       LVM_GETEXTENDEDLISTVIEWSTYLE, _
                                       0&, 0&)
   If lngStyle And LVS_EX_FULLROWSELECT Then
      fResetLVFullRowSelect = Not (apiSendMessageLong(LV.hwnd, _
                                             LVM_SETEXTENDEDLISTVIEWSTYLE, _
                                             LVS_EX_FULLROWSELECT, 0) = 0)
   Else
      fResetLVFullRowSelect = True
   End If
End Function
 |