Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. I. Система прерываний программ в ПК
  2. V.4 Возрастной грим. Метод «постепенного» старения. Использование сложных приемов, средств грима и постижа
  3. АНАЛИЗ ИСПОЛЬЗОВАНИЕ БАНКОМ РОССИИ МЕХАНИЗМА РЕФИНАНСИРОВАНИЯ КРЕДИТНЫХ ОРГАНИЗАЦИЙ
  4. Анализ механизма с использованием компьютерной среды САМАС
  5. Б. Использование Науки Дыхания
  6. Боевое использование лука
  7. Ботанико-систематическая характеристика, химическая изученность, использование в медицине.


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

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

Для работы процедур и функций к программе нужно подключить модуль dos, который содержит процедуры, предназначенные для работы с прерываниями: intr и msdos. Msdos эквивалентна вызову процедуры int r для прерывания $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, остальные регистры используются по-разному в каждом конкретном случае. В них либо записываются входные данные, либо процессор возвращает в них выходные значения, а может и все сразу. Некоторые регистры могут не использоваться.
Описанные выше функции можно оформить в виде юнита, подключаемого к программе, чтобы не писать все функции заново в каждой программе, где надо использовать мышь.

 


Дата добавления: 2015-12-07; просмотров: 180 | Нарушение авторских прав



mybiblioteka.su - 2015-2024 год. (0.006 сек.)