MouseHandlerType =

Procedure (Mask,Buttons,X,Y,DX,DY: Integer);

Здесь Mask — условие вызова процедуры; Buttons — состояние клавиатуры в момент вызова; X,Y — координаты положения мыши; DX,DY — общее количество шагов мыши в горизонтальном (DX) и вертикальном (DY) направлениях.

Условие вызова процедуры пользователя определяется состоянием разрядов параметра Mask по такому соглашению:

• бит 1 — вызов при нажатии левой кнопки мыши;

• 2 — при нажатии правой кнопки;

• 3 — при нажатии средней кнопки;

• 4 — при отпускании левой кнопки;

• 5 — при отпускании правой кнопки;

• 6 — при отпускании средней кнопки.

Если параметр Mask имеет значение 0, драйвер не вызывает процедуру пользователя.

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

Процедура SetMouseHandler. Извещает драйвер о необходимости передачи управления процедуре пользователя. Заголовок:

Procedure SetMouseHandler(Mask: Word; Proc: MouseHandlerType). Здесь Mask — условие вызова; Proc — процедура пользователя.

Процедура ChanqeMouseJiandler. Заменяет ранее объявленную процедуру пользователя на новую. Заголовок:

Procedure ChangeMouseHandler (Mask: Word; Proc:

MouseHandlerType; var OldMask: Word; var OldProc: Pointer).

Процедура возвращает в переменной OldMask условие вызова, а в OldProc — адрес ранее установленной процедуры пользователя.

Процедура ClearMouseHandler. Удаляет ранее установленный обработчик событий от мыши. Заголовок:

Procedure ClearMouseHandler.

Если к моменту обращения к этой процедуре была объявлена процедура пользователя (с помощью вызова SetMouseHandler), драйвер перестает ее вызывать.

4.2.10. Тестовая программа

Следующая довольно длинная программа иллюстрирует некоторые приемы работы с подпрограммами модуля F_Mouse. В программе создается экран, показанный на рис.4.1.