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