Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ListView - текущее кол-во выделенных строк в режиме "Multiselect"


Tcount ©   (2012-11-10 02:18:00) 

Мне нужно знать, сколько в данный момент выделено строк в ListView. Чот не могу сообразить как...
Все работает, если считывать ListView.SelCount, но у меня стоит свойство Multiselect:=true и при выделении при зажатой SHIFT SelCount почему-то возвращает ноль...
Проходиться по всем строкам и проверять на ListView.Items[i].selected - не вариант, так как у меня огромное кол-во строк...
P.S. Использую виртуальный ListView


Tcount   (2012-11-10 12:31:00) [1]


>
> Это форменное издевательство над пользователем
> :(

Ну почему же издевательство?))
Я пишу интернет-радио, у меня есть два ComboBox'a (один для жанра, другой для страны), если выбраны жанр "все" и страна "все", ты выводится весь список)
Если ты имеешь ввиду скорость вывода, то здесь все нормально, так как это виртуальный ListView)


Smile   (2012-11-10 10:13:00) [2]

> Tcount ©   (10.11.12 02:43) [5]
Например...У меня есть пару тысячстрок ...

Это форменное издевательство над пользователем
:(


Dennis I. Komarov   (2012-11-10 09:25:00) [3]

Чтобы пробежаться по выделенному списку, количество выделенных узлов не требуется...


kilkennycat   (2012-11-10 03:03:00) [4]


> Tcount ©   (10.11.12 02:58) [8]

очень странно, ибо в доке четко сказано, что при мультиселекте соунт всегда равен 1


kilkennycat   (2012-11-10 03:02:00) [5]


> Tcount ©   (10.11.12 02:48) [6]

лучше отлавливать сообщение изменения итема (LVN_ITEMCHANGING)
и выполнять проверку для него на выделение (LVM_GETSELECTIONMARK).


Tcount   (2012-11-10 02:58:00) [6]

kilkennycat, спасибо за отклик)
перехват сообщения тоже вариант, но я щас на практике просто попробовал проверять ListView.Selcount при событии OnMouseDown ListView'a и он чудесным образом справляется)
Оказывается, все намного проще)


kilkennycat   (2012-11-10 02:52:00) [7]

ну тогда вся надежда на сендмессадж LVM_GETSELECTEDCOUNT


Tcount   (2012-11-10 02:48:00) [8]

В принципе, до меня ток щас дошло, что лучше запоминать последний нажатый Итем и при нажатии на SHIFT вычитать из текущего предыдущий (или наоборот, если последний меньше предыдущего)


Tcount   (2012-11-10 02:43:00) [9]


> ну как... есть два варианта. если тебе просто кол-во нужно,
>  то создается переменная, после чего при клике мышью или
> кнопки на клаве инсерт(?)  определяется, что происходит
> с итемом, выделен он или нет. если он был выделен, а перестал
> - декрементируем переменную, если наоборот - инкрементируем,
>  что тут непонятного?
> если нужен список выделенных для дальнейшего быстрого доступа
> - значит, создаем список с индексами...

Например...У меня есть пару тысяч строк, я выделяю обычным образом несколько десятков строк в разных местах через Ctrl+клик мышкой...Потом перехожу в любое место и нажимаю уже SHIFT+клик мышкой...И получается непонятно что выделено.


kilkennycat   (2012-11-10 02:32:00) [10]


> но как узнать, сколько выделено с помощью него строк?

ну как... есть два варианта. если тебе просто кол-во нужно, то создается переменная, после чего при клике мышью или кнопки на клаве инсерт(?)  определяется, что происходит с итемом, выделен он или нет. если он был выделен, а перестал - декрементируем переменную, если наоборот - инкрементируем, что тут непонятного?
если нужен список выделенных для дальнейшего быстрого доступа - значит, создаем список с индексами...


Tcount   (2012-11-10 02:28:00) [11]


> не надо, потому что можно считать

Немного не понял, поясните, пожалуйста, это как считать?
Нажатие SHIFT я-то определю, но как узнать, сколько выделено с помощью него строк?


kilkennycat   (2012-11-10 02:28:00) [12]

и еще посмотри GetNextltem, если лень самому осуществлять поиск.


kilkennycat   (2012-11-10 02:23:00) [13]


> Проходиться по всем строкам и проверять на ListView.Items[i].
> selected

не надо, потому что можно считать
> при выделении при зажатой SHIFT


Наверх

Титульная страница Поиск, карта сайта Написать письмо