| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Событие на прокрутку колесика мыши |
| Автор: DragonFire 20.2.2006, 12:44 |
| Не подскажет кто-нибудь? |
| Автор: Snowy 20.2.2006, 12:45 |
| WM_MOUSEWHEEL Добавлено @ 12:51 Пример использования: http://forum.vingrad.ru/index.php?showtopic=84096&view=findpost&p=647038 |
| Автор: DragonFire 20.2.2006, 12:58 |
| Спасибо |
| Автор: DragonFire 20.2.2006, 15:17 | ||
| Посмотрел я и что-то у меня не пашет Почему не работает такой код:
|
| Автор: Romikgy 20.2.2006, 15:48 | ||||
Мож так будет работать? Добавлено @ 15:54
|
| Автор: Snowy 20.2.2006, 16:32 |
| Только что проверил. Твой код полностью рабочий. Видимо ты просто не в том месте ловишь. |
| Автор: DragonFire 20.2.2006, 20:46 | ||||
| Нифига ничего не пашет Romikgy: Комп не понимает, что такое floor. Попробовал заменить на Round - тоже не пашет. В обоих случаях, в моем и что предложил Romikgy срабатывает только строка с минусом:
Насчет ловлю:
|
| Автор: Snowy 20.2.2006, 22:04 |
| function WindowProc она чья? Это у тебя API приложение или VCL? |
| Автор: DragonFire 20.2.2006, 22:19 |
| VCL нету... Чистый API |
| Автор: Snowy 20.2.2006, 23:23 |
| Давай сюдавесь код. У меня все отлично отрабатывает, если WindowProc - обработчик сообщений главного окна. P.S. операционка какая? |
| Автор: DragonFire 21.2.2006, 08:49 | ||
| Ну вот примерно так... вырезал из кода все ненужно... Операционка - WindowsXP
|
| Автор: Romikgy 21.2.2006, 10:32 |
| для нее надо uses Math; А в дебагере посмотреть что приходит в HIWORD(WParam) ? |
| Автор: DragonFire 21.2.2006, 11:22 |
| HIWORD(WParam) - ничего не пишет... WParam - всегда равен 0 |
| Автор: Romikgy 21.2.2006, 11:29 |
| Хм ... странно это ... Добавлено @ 11:35 попробуй этим воспользоватся int GetSystemMetrics( int nIndex // system metric or configuration setting to retrieve ); с флагом SM_MOUSEWHEELPRESENT Windows NT only: TRUE or nonzero if a mouse with a wheel is installed; FALSE, or zero, otherwise. |
| Автор: DragonFire 22.2.2006, 12:30 |
| Че это за фишка? |
| Автор: Snowy 22.2.2006, 12:39 |
| Сам код какой-то кривой. Странно, что вообще хоть что-то работает. |
| Автор: DragonFire 22.2.2006, 14:33 |
| В смысле? Что в нем кривого? |
| Автор: Snowy 22.2.2006, 14:42 |
| У меня вообще не заработал. |
| Автор: DragonFire 22.2.2006, 15:40 |
| Это просто код из библиотеки... Для приложения он буден другим... |
| Автор: mes 26.2.2006, 02:57 | ||
| У меня была подобная проблема. При событии программа не распозновала отрицателный поворот колеса. У тебя похоже таже проблема. Дело в типе. Delta должна быт' smallint. кроме того непонятно зачем отнимать WHEEL_DELTA на неё надо делить. Вот смотри:
|
| Автор: DragonFire 26.2.2006, 11:37 |
| Всеравно не пашет... У меня почему то всевремя lParam равен 0 |
| Автор: mes 26.2.2006, 13:04 |
| Как именно не пашет? Насколько я понял, событие у тебя есть но параметры нулевые. Или как? |
| Автор: mes 26.2.2006, 14:09 | ||
| может wParam равен 0 ? попробуй так (вместо Word поставь WParam):
|
| Автор: DragonFire 26.2.2006, 19:29 |
| Неа, компу пофигу |
| Автор: Snowy 26.2.2006, 19:40 | ||
Добавлено @ 19:41 Приаттачиваю откомпилированный exe. Он ничего не делает, кроме реакции на колесо мыши. |
| Автор: Snowy 26.2.2006, 22:43 | ||||
Хотя, конечно, если все делать по честному, то код будет выглядеть так:
Насколько я помню, изначально предполагалось, что разница будет давать кол-во строк, которые нужно прокручивать за один ход колеса. Но мне как-то не попадались ситуации, чтобы значение отличалось от 120. Может в 98-х так и есть... |
| Автор: mes 26.2.2006, 23:40 | ||||
Не могу точно сказать, но вроде предусмотрено для более чуствител'ных мышек, у которых несколько шелчков соответствуют одному щелчку колесика обычной мышки. |
| Автор: DragonFire 28.2.2006, 14:40 |
| mes Я еще раз все попробовал, но всеравно не пашет - как ни крути в любом случае значение ZScroll только увеличивается... Snowy Архив скачал - ща буду разбиратся... |
| Автор: DragonFire 28.2.2006, 15:19 | ||
| Все, я понял! Оба кода рабочие, тока везде надо писать так:
Все, отладил Спасибо обоим большое |
| Автор: Snowy 28.2.2006, 16:05 |
| Конечно оба рабочие. Просто второй честный, а первый быстрый. Правда в данном случае данный выигрыш в скорости ничего не значит. Большое пожалуйста |
| Автор: mes 1.3.2006, 00:00 | ||
| В скоростном примере есть недостаток, что в опеределенных ситуациях(которых конечно может и не быть, но всё же) вероятна ситуация, когда программа неправильно оценит направление врашения колесика. Во втором примере есть деление, которое само по себе медленое. Предлагаю такое компромиссное решение:
Значение $7FFF наибольшее положительное при преобразовании формата из Word в Smallint. |
| Автор: Snowy 1.3.2006, 10:23 |
| Скорость здесь совсем не критична. Не могу представить, чтобы юзер крутил колесом с такой скоростью, что система не будет успевать отвечать Но такой вариант имеет смысл. На всякий случай, пусть даже он никогда и не наступит. Хотя придумывать можно еще много всякого ;) |
| Автор: mes 30.10.2006, 20:29 | ||||||||
Я понимаю, что поднимаю старую тему, но всё же считаю, что инфа может быть полезна: Имхо правильный код:
либо:
|
| Автор: Snowy 30.10.2006, 21:55 |
| mes, этот вариант - то же самое, только с приведением типов. Разница только в знаковости или беззнаковости типов. Оптимизатор Delphi всё равно приведёт её к предыдущему виду. |
| Автор: mes 2.11.2006, 15:41 | ||
Ну да, для компа будет один и тот же код, но програмисту удобнее, понятнее и логичнее последний. Именно поэтому я его и привёл, несмотря на давность темы P.S. А у начинающих и вопросов не будет: " почему именно $7FFF ? " ;) |
| Автор: blackkot32 28.10.2018, 00:34 | ||
пишу глобальный хук на колесо мыши, т.к. нужно отслеживать прокрутку в другой программе. никак не получается определить в какую сторону крутится колесо мыши. куда ни крути - одно и тоже. подскажите, что не так, пожалуйста.
|
| Автор: Snowy 29.10.2018, 14:49 | ||
|