Как определить, в какой колонке ListView был клик
Проблема заключается в том, что при
использование элемента управления ListView в режиме
списка (Listview.View = lvwList), нет свойств, определяющих,
по какой колонке пользователь кликнул в
выделенной строке. Метод HitTest в ListView возвращает
только ссылку на ListItem, по которому пользователь
кликнул. Чтобы получить нужную нам информацию,
можно воспользоваться API функцией SendMessage в
событиях MouseUp или MouseDown в ListView:
Private Declare Function SendMessage Lib _
"user32" Alias "SendMessageA" (ByVal hWnd As _
Long, ByVal wMsg As Long, ByVal wParam As _
Long, lParam As Any) As Long
Private Const LVM_SUBITEMHITTEST As Long = 4153
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Type LVHITTESTINFO
pt As POINTAPI
lngFlags As Long
lngItem As Long
lngSubItem As Long
End Type
Private Sub ListView1_MouseUp(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
Dim hti As LVHITTESTINFO
Dim lngRet As Long
hti.pt.X = X / Screen.TwipsPerPixelX
hti.pt.Y = Y / Screen.TwipsPerPixelY
lngRet = SendMessage(ListView1.hWnd, _
LVM_SUBITEMHITTEST, 0&, hti)
Debug.Print "Row=" & hti.lngItem,
Debug.Print "Col=" & hti.lngSubItem
End Sub
|