Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Глобальный инструмент "Hand"


Автор: Crw 11.5.2009, 16:04
Вобщем появилась интересная идея сделать инструмент "Hand" (как в просмотрщиках Пдфок, изображений и т.п.), только для всех Виндовых контролов которые имеют скрулбары. Идея довольно проста - перехватываем нажатие кнопки мышки, когда происходит WM_MOUSEMOVE, посылаем нужному окну сообщение WM_VSCROLL (или WM_HSCROLL).
В целом получилось не плохо (проект еще не закончен), правда перетаскивать контент получается не во всех программах (например в МС Офисе подобная технология не работает, как и в Файерфоксе). В Дельфях и Визуал студио все работает как и предполагалось, что оказалось весьма удобной функцией для прокрутки кода.
Добавил также небольшую инертность, как в АйФонах и тому подобных современных девайсах.
Исходники (вместе с откомпилированой программой) можно скачать http://filesexchange.narod.ru/EnhancedMouse.rar (Делфи 7).
В программе при нажатии на кнопку Старт, вешается хук на события от мышки. Перетаскивание делается правой кнопкой мышки.

Автор: Mechanic 11.5.2009, 16:23
It Works!  smile

Правда, в Paint'e заметил, что масштаб перемещения не совсем естественный. То есть, наблюдается эффект поручня эскалатора в метро, который всегда из рук старается уползти.

И можно вместо Exlude List'а предусмотреть вариант работы наоборот с Include List'ом (опционально)?

Автор: kami 11.5.2009, 16:33
Цитата(Crw @  11.5.2009,  16:04 Найти цитируемый пост)
сделать инструмент "Hand"

Хорошо.
Видно, что для создания инструмента Hand был задействован инструмент Head smile

Добавлено через 2 минуты и 11 секунд
Цитата(Crw @  11.5.2009,  16:04 Найти цитируемый пост)
вешается хук на события от мышки.

В Висте для работы со всеми приложениями неплохо было бы, чтобы программа запускалась с правами админа (манифест добавить), бо иначе хук устанавливается не во все процессы.

Автор: Crw 11.5.2009, 17:59
Цитата(Mechanic @  11.5.2009,  16:23 Найти цитируемый пост)
Правда, в Paint'e заметил, что масштаб перемещения не совсем естественный.

Просто это зверь (Paint) так реагирует на WM_?SCROLL ... В текстовых редакторах это сообщение означает перемещение на одну строчку (или символ), а в Пейнте это значение равняется целым 8 пикселям. И ИЕшке тоже шаг прокрутки больше чем хотелось бы. Как с этим бороться пока не понятно. Думал посылать сообщение WM_MOUSEWHEEL (большинство приложений на него реагируют лучше), но результаты прокрутки тоже не очень - шаг прокрутки задается системой и если он стоит больше 1 строчки, то прокрутка не совсем плавная получается.
Цитата(Mechanic @  11.5.2009,  16:23 Найти цитируемый пост)
И можно вместо Exlude List'а предусмотреть вариант работы наоборот с Include List'ом (опционально)? 

Можно. Но зачем?

Цитата(kami @  11.5.2009,  16:33 Найти цитируемый пост)
В Висте для работы со всеми приложениями неплохо было бы, чтобы программа запускалась с правами админа

Пробовал в Семерке (правда под Админовским профилем), все работало как предполагалось. Но наверное все-таки не помешает права админа требовать при старте.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)