ListView Subitem Click

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

ListView Subitem Click

Сообщение BION » 24.11.2007 (Сб) 12:04

Мое почтение!
Не подскажете, как узнать по какому сабайтему в листвью сделан клик?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.11.2007 (Сб) 12:36

Используй SendMessage для отправки сообщения LVM_SUBITEMHITTEST и структуру LVHITTESTINFO, в которую помещаются координаты курсора перед отправкой сообщения, по после возвращается индекс сабитема, подробности в MSDN.

ADD:

Код: Выделить всё
Public Type LVHITTESTINFO
    pt As POINTAPI
    flags As Long
    iItem As Long
    iSubItem As Long
End Type
Public Const LVM_FIRST               As Long = &H1000      ' ListView messages
Public Const LVM_SUBITEMHITTEST      As Long = LVM_FIRST + 57
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'
' Проверяет попадание данных координат на подэлемент списка
'
' Аргументы:
'
' nX - X-координата в твипах
' nY - Y-координата в твипах
' lv  - собстно ListView
'
Public Function HitTestSubItem(ByVal nX As Single, ByVal nY As Single, ByVal lv As ListView) As Long
Dim hti As LVHITTESTINFO
' преобразуем координаты в пиксели
hti.pt.X = ScaleX(nX, vbTwips, vbPixels)
hti.pt.Y = ScaleY(nY, vbTwips, vbPixels)
hti.flags = LVHT_ONITEM
       
    ' собственно и все
    SendMessage lv.hwnd, LVM_SUBITEMHITTEST, 0, hti
    HitTestSubItem = hti.iSubItem
End Function
Весь мир матрица, а мы в нем потоки байтов!

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Сообщение BION » 24.11.2007 (Сб) 12:56

Viper писал(а):Используй SendMessage для отправки сообщения LVM_SUBITEMHITTEST и структуру LVHITTESTINFO, в которую помещаются координаты курсора перед отправкой сообщения, по после возвращается индекс сабитема, подробности в MSDN.


ОГРОМНОЕ СПАСИБО!!!

Ах да, еще один нюанс. для тех кому вдруг пригодится,
вот эти константы нужно добавить:
Код: Выделить всё
Const LVHT_ONITEMICON = &H2
Const LVHT_ONITEMLABEL = &H4
Const LVHT_ONITEMSTATEICON = &H8
Const LVHT_ONITEM = (LVHT_ONITEMICON Or LVHT_ONITEMLABEL Or LVHT_ONITEMSTATEICON)

BION
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 259
Зарегистрирован: 24.01.2005 (Пн) 21:05

Сообщение BION » 25.11.2007 (Вс) 18:33

Пришлось вновь вернуться к этой теме, т.к. возникла еще ода преграда.
Мне нужно закрасить ячейку по которой кликнул.

Нашел вот пример закраса item'a полностью но затрудняюсь сделать закрас subitem'a. Не поможете?
Вложения
LV3.RAR
Пример закраски item'a
(9.87 Кб) Скачиваний: 68


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 79

    TopList  
cron