Страница: 1 |
Страница: 1 |
Вопрос: ListView и SubItems
Добавлено: 13.02.05 09:32
Автор вопроса: KVU
Здравствуйте, хотелось бы узнать есть возможность у объекта List View изменять SubItems, так же как Item кликнув по нему?
С Уважением, Владислав.
Ответы
Всего ответов: 6
Номер ответа: 1
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #1
Добавлено: 13.02.05 13:14
Цитата:
Ответ:
 im lvHTI As LVHITTESTINFO
lvHTI.pt.x = x / Screen.TwipsPerPixelX
lvHTI.pt.y = y / Screen.TwipsPerPixelY
SendMessage ListView1.Hwnd, LVM_SUBITEMHITTEST, 0, lvHTI
lItemIndex = lvHTI.iItem + 1
lSubItemIndex = lvHTI.iSubItem
That's all!
Having these two indexes you can use them to get Text property of the
corresponding ListItem and/or ListSubItem.
Regards,
.....
PS: You can also place this code to ItemClick event, but as far as this event
does not have X and Y arguments, you'll have to use GetCursorPos() and
ScreenToClient() API-functions to obtain X and Y in the client scale.
Надеюсь, разберёшься.
Номер ответа: 2
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #2
Добавлено: 13.02.05 15:38
Есть SendMessage,hList,LVM_GETITEM
без вычисления координат мыши и пересчета их в координаты листвью
Номер ответа: 3
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #3
Добавлено: 13.02.05 16:29
Вообще-то можно ещё проще:
Но, насколько я понял, у автора вопроса проблема именно с "двойкой" - т.е. как понять, что мышкой щёлкнули не просто по "пятому ряду" (к примеру), а именно по 2-ому саб-айтему этого ряда. Ведь листвью имеет свойство SelectedItem, но НЕ имеет свойства SelectedSubItem! выделение он отслеживает на уровне "рядов", а не "ячеек".
Поэтому без LVM_SUBITEMHITTEST невозможно понять, на какой именно сабайтем пришёлся щелчок мыши.
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 13.02.05 18:58
Очень даже можно понять, по какому субитему был клик, и без LVM_SUBITEMHITTEST.
Когда происходит клик на каком-либо элементе листвью, система посылает WM_NOTIFY c указателем на структуру, в которой всё расписывается: какой hwnd контрола, какое действие случилось (клик), на каком итеме и в каком субитеме этого итема нажата мышь. Всё готовое преподносится. Бери - не хочу. На VB нет примера, вот на асме как раз только эти и занимался. Думаю, можно разобраться и понять, как получить информацию о клике:
mov ebx,lParam
mov eax,[ebx.NMHDR].hwndFrom
.if eax==hListAddr
mov eax,[ebx.NMHDR].code
.if eax==NM_CLICK
assume ebx: ptr NMITEMACTIVATE
mov eax,[ebx].iItem ;номер итема
mov edx,[ebx].iSubItem ;номер субитема
Т.е. присылается указатель на структуру NMITEMACTIVATE, в которой описывается, кто активирован, каково его предыдущее состояние, состояние клавы при нажатии мыши и т.д.
Номер ответа: 5
Автор ответа:
Comanche
Вопросов: 87
Ответов: 459
Профиль | | #5
Добавлено: 15.02.05 11:25
2cresta:
Согласен, проморгал эту структуру! Теперь буду знать. И понял, почему именно её проморгал: в той задаче, которую я решал с листвью, мне нужно было определять айтем/сабайтем при движении мыши, а не при щелчке (выборе ряда), и поэтому, есс-с-сно, я использовал LVM_SUBITEMHITTEST. И вот после этого меня на этом сообщении и заклинило )
Номер ответа: 6
Автор ответа:
Sur
ICQ: 1249088
Вопросов: 10
Ответов: 304
Web-сайт:
Профиль | | #6
Добавлено: 15.02.05 17:18
Думаю человеку надо было это
Контрол ListView предоставляющий возможность интерактивно редактировать значения Subitem'ов.
http://vbrussian.com/download.asp?Type=Control&ID=18