Скачиваний:
109
Добавлен:
21.01.2014
Размер:
2.38 Mб
Скачать

4. Контрольные вопросы

                  1. Назначение и синтакис операторов и функций: INP, OUT, OPEN COM, STICK, STRIG, INP, OUT, WAIT?

Вопросы по процедуре выполнения индивидуального задания.

5. Библиографический список

                  1. Бобровский С. Программирование на языке QBASIC для школьников и студентов. — М.: Десс; Инфорком-Пресс, 1999. - 208 с.

                  1. Зельднер Г.А. Программируем на языке QuickBASIC 4.5. - М: ABF, 1996. - 432 с.

                  1. Введение в программирование на языке Microsoft BASIC: Учебное пособие / Ю.Я. Максимов, С.В. Осипов, А.В. Потемкин, Щ.С. Симоненков. - М.: ”Диалог-МИФИ”,1991. - 176 с.

Министерство образования

Российской Федерации

Тульский государственный университет

Кафедра “Инструментальные и метрологические системы”

Информатика

ЛАБОРАТОРНАЯ РАБОТА 24

Программирование интерфейса с манипулятором типа "мышь"

для студентов очного обучения

Тула 2000 г.

1. Цель и содержание работы

Целью работы является изучение принципов обеспечения интерфейса с драйвером “мыши”.

Полученные знания и навыки необходимы для выполнения других лабораторных работ, а также практической деятельности.

2. Порядок выполнения работы

                  1. Изучить теоретическую часть.

                  1. Получить задание у преподавателя.

                  1. Выполнить задание.

                  1. Оформить отчет.

                  1. Защитить работу.

3. Теоретическая часть

Использование манипулятора “мышь” может быть оправдано только в графических программах, которые, в свою очередь, имеют узкую область применения (проектирование, рисование и т.п.). Большинстово же программ ориентированы на текстовый режим экрана.

Процедура MOUSE, использующая прерывание INT 33H:

'$INCLUDE: 'interupt.bi'

DECLARE SUB mouse (G1%, G2%, G3%, G4%)

DEFINT A-Z

SUB mouse (m1, m2, m3, m4)

'______________________________________________________

'Эта процедура обеспечивает интерфейс с драйвером мыши

'm1, m2, m3, m4 - параметры, передаваемые в драйвер мыши

'и возвращаемые оттуда. Они соответствуют регистрам

'процессора AX, BX, CX, DX

'______________________________________________________

n = &H33: 'прерывание 33H

inreg.ax = m1 'входные регистры

inreg.bx = m2

inreg.cx = m3

inreg.dx = m4

CALL interrupt(n, inreg, outreg)

m1 = outreg.ax 'выходные регистры

m2 = outreg.bx

m3 = outreg.cx

m4 = outreg.dx

END SUB

Основные функции прерывания 33Н, и примеры к ним:

Функция 0 показывает текущее состояние драйвера мыши

На входе: G1% = 0

На выходе:

G1%=статус драйвера мыши (-1: установлен, 0: не установлен)

G2%=число кнопок мыши (2 или 3 кнопки)

Пример:

'Определение состояния драйвера мыши

G1% = 0: G2% = 0

CALL mouse(G1%, G2%, G3%, G4%)

IF G2% AND 2 THEN PRINT "Двухкнопочная мышь"

IF G2% AND 3 THEN PRINT "Трехкнопочная мышь"

IF NOT G1% THEN PRINT "Драйвер мыши не установлен"

Функция 1 вызывает появление курсора мыши на экране

На входе: G1% = 1

На выходе: Ничего

Пример:

'Включить курсор мыши

G1% = 1

CALL mouse(G1%, G2%, G3%, G4%)

Функция 2 удаляет курсор мыши с экрана

На входе: G1% = 2

На выходе: Ничего

Пример:

'Выключить курсор мыши

G1% = 2

CALL mouse(G1%, G2%, G3%, G4%)

Функция 3 читает статус кнопок мыши и координаты курсора

На входе: G1% = 3

На выходе:

G2% = cтатус кнопок

G3% = горизонтальная координата курсора

G4% = вертикальная координата курсора

Пример:

'Прочитать координаты курсора и статус кнопок

DO

G1% = 3

CALL mouse(G1%, G2%, G3%, G4%)

LOCATE 1, 1

PRINT "Координаты мыши : X ="; G3%; "Y = "; G4%; ""

IF G2% AND 1 THEN LOCATE 3, 1: PRINT "Левая кнопка"

IF G2% AND 2 THEN LOCATE 3, 1: PRINT "Правая кнопка"

IF G2% AND 4 THEN LOCATE 3, 1: PRINT "Средняя кнопка"

LOOP

Функция 4 устанавливает новую текущую позицию курсора мыши

Экранный режим

Разрешение

Экранный режим

Разрешение

0

640200

9

640350

1

640200

10

640350

2

640200

11

640480

7

640200

12

640480

8

640200

13

640200

На входе: G1% = 4

G3% = новая горизонтальная координата Х

G4% = новая вертикальная координата Y

На выходе: Ничего

Пример:

'Установить курсор мыши в верхнем левом углу экрана

G1% = 4: G3% = 0: G4% = 0

CALL mouse(G1%, G2%, G3%, G4%)

Функция 5 определяет какая кнопка была нажата и ее координаты

На входе: G1% = 5;

G2% = статус кнопки (0-левая; 1-правая; 2-средняя)

На выходе: G1% = статус кнопки;

G2% = номер нажатой кнопки;

G3% = горизонтальная координата курсора в момент последнего нажатия;

G4% = вертикальная координата курсора в момент последнего нажатия

Пример:

'Прочитать координату нажатой левой кнопки

DO

G1% = 5: G2% = 0: CALL mouse(G1%, G2%, G3%, G4%)

IF G1% AND 1 THEN LOCATE 1, 1: PRINT "Нажата левая кнопка X ="; G3%; ""

LOOP

Функция 6 - прочитать статус отпущенной кнопки

На входе: G1% = 6;

G2% = статус кнопки (0-левая; 1-правая; 2-средняя)

На выходе:G1% = статус кнопки;

G2% = номер отпущенной кнопки;

G3% = горизонтальная координата курсора в момент последнего нажатия;

G4% = вертикальная координата курсора в момент последнего нажатия

Пример:

'Прочитать координату отпущенной левой кнопки

DO

G1% = 6: G2% = 0: CALL mouse(G1%, G2%, G3%, G4%)

IF NOT G1% THEN LOCATE 1, 1: PRINT "Нажата левая кнопка X ="; G3%; ""

LOOP

Функция 7 - ограничить горизонтальное (Х) перемещение курсора

На входе: G1% = 7;

G2% = минимальная горизонтальная координата курсора;

G3% = максимальная горизонтальная координата курсора

На выходе: Ничего

Пример:

'Ограничить горизонтальное перемещение курсора между 100 и 200

G1% = 7: G2% = 100: G3% = 200

CALL mouse(G1%, G2%, G3%, G4%)

Функция 8 - ограничить вертикальное (Y) перемещение курсора

На входе: G1% = 8;

G2% = минимальная вертикальная координата курсора;

G3% = максимальная вертикальная координата курсора

На выходе:Ничего

Пример:

'Ограничить вертикальное перемещение курсора между 100 и 200

G1% = 8: G2% = 100: G3% = 200

CALL mouse(G1%, G2%, G3%, G4%)