Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.168] |
|
Сообщ.
#1
,
|
|
|
Справка по программированию мыши.
Да поможет она всем нуждающимся. Что здесь есть. Сначала идет общая информация, затем некоторое описание по программированию цветного анимированного указателя. Итак, общая теория. Поддержка мыши производится с помощью драйвера от небезызвестной фирмы Microsoft. Для доступа к драйверу используется прерывание $33. С помощью драйвера можно легко закодить мышь для текстовых режимов и черно - белый курсор 16X16 для низких разрешений графических режимов. Список известных мне функций прерывания (то, что записывается в регистр AX).. $00 Сбросить установки драйвера. $01 Показать указатель. $02 Скрыть указатель. $03 Получить состояние мыши. $04 Переместить указатель. $05 Получить информацию о нажатиях кнопки. $06 Получить информацию об отпусканиях кнопки. $07 Установить границы перемещения по горизонтали. $08 Установить границы перемещения по вертикали. $09 Установить вид графического указателя. $0A Установить вид текстового указателя. $0B Получить относительное перемещение. $0C Установить условия вызова подпрограммы пользователя. $0D Включить эмуляцию светового пера. $0E Выключить эмуляцию светового пера. $0F Установить отношение числа шагов на единицу измерения экрана. $10 Установить область невидимости курсора. $13 Установить границу удвоения скорости перемещения. $14 Заменить подпрограмму пользователя. $15 Получить размер буфера, необходимый для сохранения состояния драйвера. $16 Сохранить текущее состояние драйвера. $17 Загрузить сохраненное состояние драйвера. $1D Установить видеостраницу мыши. $1E Получить видеостраницу мыши. $21 Получить информацию о драйвере мыши. $24 Получить информацию о мыши. Более подробное описание каждой функции в первом прикрепленном файле. Теперь несколько глубже. Для начала вкратце. Далее идут примеры со специализацией на TMT Pascal. Модуль, реализующий все это безобразие, смотри во втором прикрепленном файле. Немножко о его содержании. О формате курсоров. Каждый курсор представляет собой запись и хранит "активную точку" (поля HotX и HotY), список своих меняющихся спрайтов (поле images; собственно говоря, только для этого нужен SprList.pas) и количество смен в секунду (поле SPS). Это фактически достаточный минимум для анимированной мышки. Как осуществляется анимация. Ну, есть у нас так заданный курсор, попробуем теперь с ним поработать.. Делается это не сложно, главное - знать когда где какой спрайт выводить и вовремя за собой очищать экран. Всю ответственность берет на себя процедура MoveMouse. В случае если курсор не показан (состояние изменяется посредством ShowMouse и HideMouse) все вообще просто - нужно только изменять координаты. Это делается через вызов функции, возвращающей относительное смещение. При включенном показе несколько сложнее. Но это как раз то, что нас интересует. Теперь это нужно удачно взаимоскомпоновать и все будет хорошо. Немного о получении координат. Для больших разрешений майкросовтовская версия такой функции работает, вообще говоря, некорректно. Зато есть другая, которая позволяет получить относительное смещение (отсчет ведется от предыдущего вызова этой функции, либо любой другой, возвращающей координаты курсора). Что будем делать: храним координаты сами, при вызове MoveMouse используем эту функцию, изменяем координаты и перерисовываем курсор. Хочу заметить, что неплохо и при получении координат передвигать мышку. Изменение координат, естественно, делается отдельной функцией. В ней нужно, если есть такое правило, проверять, не вылазит ли курсорчик за установленные границы, если вылазит, то присваивать плохой координате значение этой границы. Едем дальше - демка 1. Рисование ломаной. Смотри третий прикрепленный файл. Все просто до странности. Левой кнопкой отмечаем точки и заносим их координаты в очередь. Для этого в цикле: До тех пор, пока не нажата правая кнопка. Далее по сохраненным координатам рисуем ломаную, последовательно соединяя отмеченные точки. Ну, и наконец - демка 2. Технология Drag&Drop. Угадай где искать пример . Что, собственно говоря, такое Drag&Drop. Согласно Romtek'у Цитата Технология так и называется: "хватай и бросай": навели курсор на какой-то объект, нажимаем кнопку мыши, и, удерживая её в этом положении, переносим туда, где хотим "бросить". Там мышку и отпускаем. В этой программе будем использовать два курсора: обыкновенный и для перетаскивания прямоугольничка. Теперь о реализации перемещения прямоугольника. По сути, она очень напоминает обработку самого курсора. Только теперь скрываем сначала курсор, потом прямоугольник (курсор всегда выше), изменяем координаты прямоугольника (у курсора меняются при его перемещении), показываем прямоугольник и курсор. Итак, что делает программа. Пока не нажата правая кнопка повторяем: Почему сделал выход правой кнопкой, не знаю, наверное, так удобно.. На сим и хочу остановиться. Как всегда все вопросы и предложения принимаются и рассматриваются. Содержимое архива: 1 - functions.zip 2 - GrMouse.zip 3 - poly.zip 4 - Drag&Drop.zip Прикреплённый файлmouse.zip (37.4 Кбайт, скачиваний: 526) |