Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЫШЬ_1.doc
Скачиваний:
22
Добавлен:
24.08.2019
Размер:
501.76 Кб
Скачать

Использование прерываний мыши в Паскале

В языке «Паскаль» нет стандартных функций для работы с мышью, поэтому для использования мыши нам необходимо воспользоваться прерываниями. В Паскале для работы с прерываниями существует две функции: msdos и intr. Прерывания зависят от состояния регистров. Регистры - ячейки памяти, расположенные в центральном процессоре и использующиеся для временного хранения управляющей или обрабатываемой информации.

Для работы с мышью используется прерывание $33, которое обрабатывается операционной системой. Следовательно, для работы программы, использующей процедуры работы с мышью необходимо установить драйвер мыши для dos, если вы запускаете программу не windows dos - box.

Для работы процедур и функций к программе нужно подключить модуль dos, который содержит процедуры, предназначенные для работы с прерываниями: intr и msdos. Msdos эквивалентна вызову процедуры intr для прерывания $21, поэтому она нам не подходит.

function resetmouse:boolean;   var r:registers;   begin     r.ax:=0;     intr($33,r);     resetmouse:=r.ax=$FFFF;   end;

Функция resetmouse включает мышь в программе. Она возвращает значение true, если возникли ошибки. Скорее всего, это связано с отсутствием драйвера мыши. Resetmouse необходимо запускать один раз и обязательно перед использованием остальных функции.

procedure hidemousecursor;   var r:registers;   begin     r.ax:=2;     intr($33,r);   end; Процедура hidemousecursor делает курсор мыши невидимым. procedure showmousecursor;   var r:registers;   begin     r.ax:=1;     intr($33,r);   end;

Результат работы showmousecursor прямо противоположен hidemousecursor, т.е. делает курсор мыши видимым. При запуске resetmouse курсор не появляется автоматически, поэтому необходимо использовать процедуру showmousecursor.

procedure movemousecursor(x,y:integer);   var r:registers;   begin     r.ax:=4;     r.cx:=x;     r.dx:=y;     intr($33,r);   end;

Процедура movemousecursor перемещает курсор мыши в нужную точку. У нее есть два обязательных параметра: x и y. Которые задают соответственно горизонтальную и вертикальную координаты точки, в которую надо передвинуть курсор. Начало координат находится в верхнем левом углу и ось oy направлена вниз.

procedure readmousestate(var x,y:integer;var lb,mb,rb:boolean);   var r:registers;   begin     r.ax:=3;     intr($33,r);     x:=r.cx;     y:=r.dx;     lb:=(r.bx and 1)<>0;     rb:=(r.bx and 2)<>0;     mb:=(r.bx and 4)<>0;   end;

Readmousestate является самой интересной, т.к. именно она возвращает текущее положение мыши и проверяет нажатие клавиш. Процедура возвращает в переменные x, y координаты мыши на экране. Переменные lb (левая клавиша), mb (средняя клавиша), rb (правая клавиша) булевского типа возвращаются значения true, если нажата соответствующая клавиша и false в противном случае.

Выше описаны наиболее важные процедуры работы с мышью. На самом деле их гораздо больше, но они используются редко и для начинающего программиста не так важны. Главное понять принцип работы с прерываниями: прерывания содержат множество функций для работы с конкретным оборудованием. Номер функции записывается в регистр ax, остальные регистры используются по-разному в каждом конкретном случае. В них либо записываются входные данные, либо процессор возвращает в них выходные значения, а может и все сразу. Некоторые регистры могут не использоваться. Описанные выше функции можно оформить в виде юнита, подключаемого к программе, чтобы не писать все функции заново в каждой программе, где надо использовать мышь.