![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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