15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как определить, в какой колонке 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