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