| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > События начала и конца прокрутки в ListView |
| Автор: Ne1tr1n0 6.9.2012, 14:55 |
| Добрый день! Собсна вот вопрос: возможно ли перехватить события начала и конца вертикальной прокрутки в ListView? Первое что нарыл в гугле это уведомления LVN_BEGINSCROLL и LVN_ENDSCROLL. Решил попробовать их обработать - результат оказался не тем, которого я ждал. Возможно я конечно неправильно их обрабатывал (поскольку уведомления шлются родителю ListView то у формы прописал обработчик WM_NOTIFY и в нем уже проверял Msg.NMHdr.code). Ещё вариант - обрабатывать WM_VSCROLL у самого ListView и проверять ScrollCode на SB_ENDSCROLL, но остается вопрос, как определить начало скроллинга? Или даже черт бы с ним с началом, но при прокрутке ListView колесом мыши WM_VSCROLL не приходит. Приходят события WM_MOUSEWHEEL как с ними быть я пока не представляю. Разве что как-нить дельту считать? Кто-нить сталкивался с подобной задачей? Спасибо. |
| Автор: MetalFan 7.9.2012, 10:59 |
| Ne1tr1n0, А если не секрет, изначально какая задача решается? |
| Автор: Ne1tr1n0 7.9.2012, 13:49 | ||
Собсна вот. Правда я не особо представляю пока как можно определить конец прокрутки колеса мыши, разве что по таймеру как-нить. Ну или на основании каких-нить операций с дельтой. |
| Автор: MetalFan 7.9.2012, 17:28 |
| хм.. а может просто по таймеру проверять, что изменился первый отображаемый элемент? раз в 500-1000мсек к примеру. и запускать генерацию тумбов видимой области. |
| Автор: Ne1tr1n0 8.9.2012, 10:51 |
| Я тут подумываю о том, чтобы просто запретить прокрутку колесиком (в обработке WM_MOUSEWHEEL Msg.Result:=1), потому что по большому счету SB_ENDSCROLL меня полностью устраивает. Но это конечно не лучшее решение. |
| Автор: bems 10.9.2012, 11:04 |
| Основывайся на событии перерисовки итема. Если наступило событие о перерисовке и миниатюра для него еще не создана, то переместить этот итем в списке на генерацию миниатюры в самое начало |