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.