|
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
|
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Не подскажет кто-нибудь?
|
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
WM_MOUSEWHEEL
Добавлено @ 12:51 Пример использования: http://forum.vingrad.ru/index.php?showtopi...st&p=647038 |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Спасибо
|
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Посмотрел я и что-то у меня не пашет
Почему не работает такой код:
|
|||
|
||||
Romikgy |
|
||||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Мож так будет работать? Добавлено @ 15:54
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
||||
|
|||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Только что проверил.
Твой код полностью рабочий. Видимо ты просто не в том месте ловишь. |
|||
|
||||
DragonFire |
|
||||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Нифига ничего не пашет
Romikgy: Комп не понимает, что такое floor. Попробовал заменить на Round - тоже не пашет. В обоих случаях, в моем и что предложил Romikgy срабатывает только строка с минусом:
Насчет ловлю:
|
||||
|
|||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
function WindowProc она чья?
Это у тебя API приложение или VCL? |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
VCL нету...
Чистый API |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Давай сюдавесь код. У меня все отлично отрабатывает, если WindowProc - обработчик сообщений главного окна.
P.S. операционка какая? |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Ну вот примерно так... вырезал из кода все ненужно...
Операционка - WindowsXP
|
|||
|
||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
для нее надо uses Math; А в дебагере посмотреть что приходит в HIWORD(WParam) ? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
HIWORD(WParam) - ничего не пишет...
WParam - всегда равен 0 |
|||
|
||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 13 Всего: 146 |
Хм ... странно это ... Добавлено @ 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 |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Че это за фишка?
|
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Сам код какой-то кривой.
Странно, что вообще хоть что-то работает. |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
В смысле? Что в нем кривого?
|
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
У меня вообще не заработал.
|
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Это просто код из библиотеки...
Для приложения он буден другим... |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
У меня была подобная проблема. При событии программа не распозновала отрицателный поворот колеса. У тебя похоже таже проблема. Дело в типе. Delta должна быт' smallint.
кроме того непонятно зачем отнимать WHEEL_DELTA на неё надо делить. Вот смотри:
Это сообщение отредактировал(а) mes - 26.2.2006, 20:47 |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Всеравно не пашет...
У меня почему то всевремя lParam равен 0 |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
Как именно не пашет? Насколько я понял, событие у тебя есть но параметры нулевые. Или как? |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
может wParam равен 0 ? попробуй так (вместо Word поставь WParam):
|
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Неа, компу пофигу
|
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Добавлено @ 19:41 Приаттачиваю откомпилированный exe. Он ничего не делает, кроме реакции на колесо мыши. Присоединённый файл ( Кол-во скачиваний: 17 ) wmmwheel.zip 2,94 Kb |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
в моём коде была опечатка: вместо HiWord, я написал hi. ( Исправил в коде).
не согласен с этой строчкой, так как подобное применение противоречит "замыслу" параметра Wheel_Delta. Должен признать, что такой код работает, но не могу согласится с тем , что он работает и будет работат правильно. Wheel_Delta введена для обратной совместимости, когда мышки будут за одно сообщение передавать не один шелчок, а группу. WParam в зависимости от направления должен быть равен Wheel_delta или -Wheel_Delta (120 или -120). Однако "проверив" значения WParam мы обнаруживаем, что он равен либо 120 или 65416. Причина етого недоразумения в несоответствии типов. Word (65416) = 65416 Integer(65416) = 65416 Smallint(65416)=-120 ! Обратили внимание что при преобразовании в тип Integer,( который может принимать отрицательные значения), значение остается положительным, а преобразовании в тип SmallInt даёт то, что мы утеряли. Добавлено @ 21:30 Еше хотелось бы сказать по поводу сообщениa WM_MOUSEWHEEL: его может получат только активное окно. поэтому используйте SetFocus. |
|||
|
||||
Snowy |
|
||||||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Хотя, конечно, если все делать по честному, то код будет выглядеть так:
|
||||||
|
|||||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
Не могу точно сказать, но вроде предусмотрено для более чуствител'ных мышек, у которых несколько шелчков соответствуют одному щелчку колесика обычной мышки. |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
mes
Я еще раз все попробовал, но всеравно не пашет - как ни крути в любом случае значение ZScroll только увеличивается... Snowy Архив скачал - ща буду разбиратся... |
|||
|
||||
DragonFire |
|
|||
Опытный Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Все, я понял!
Оба кода рабочие, тока везде надо писать так:
Все, отладил Спасибо обоим большое |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
||||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
В скоростном примере есть недостаток, что в опеределенных ситуациях(которых конечно может и не быть, но всё же) вероятна ситуация, когда программа неправильно оценит направление врашения колесика. Во втором примере есть деление, которое само по себе медленое. Предлагаю такое компромиссное решение:
Значение $7FFF наибольшее положительное при преобразовании формата из Word в Smallint. Это сообщение отредактировал(а) mes - 1.3.2006, 00:01 |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
Скорость здесь совсем не критична.
Не могу представить, чтобы юзер крутил колесом с такой скоростью, что система не будет успевать отвечать Мыша задымится Но такой вариант имеет смысл. На всякий случай, пусть даже он никогда и не наступит. Хотя придумывать можно еще много всякого ;) |
|||
|
||||
mes |
|
||||||||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
Я понимаю, что поднимаю старую тему, но всё же считаю, что инфа может быть полезна: Имхо правильный код:
либо:
Это сообщение отредактировал(а) mes - 30.10.2006, 20:31 |
||||||||
|
|||||||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
mes, этот вариант - то же самое, только с приведением типов.
Разница только в знаковости или беззнаковости типов. Оптимизатор Delphi всё равно приведёт её к предыдущему виду. |
|||
|
||||
mes |
|
|||
любитель Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 2 Всего: 250 |
Ну да, для компа будет один и тот же код, но програмисту удобнее, понятнее и логичнее последний. Именно поэтому я его и привёл, несмотря на давность темы . P.S. А у начинающих и вопросов не будет: " почему именно $7FFF ? " ;) |
|||
|
||||
blackkot32 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 27.10.2018 Репутация: нет Всего: нет |
пишу глобальный хук на колесо мыши, т.к. нужно отслеживать прокрутку в другой программе. никак не получается определить в какую сторону крутится колесо мыши. куда ни крути - одно и тоже. подскажите, что не так, пожалуйста.
Это сообщение отредактировал(а) blackkot32 - 28.10.2018, 00:35 |
|||
|
||||
Snowy |
|
|||
Эксперт Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 30 Всего: 484 |
||||
|
||||
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |