Модуль Events предназначен для создания программ, управляемых событиями. Он работает только в паре с модулем GraphABC. При одновременном подключении модулей GraphABC и Events программа после запуска и выполнения своего основного блока (begin/end.) не завершается, а продолжает выполняться, отслеживая возникающие события. Все события связаны с графическим окном: это события, приходящие от мыши, клавиатуры, события изменения размеров графического окна и событие его закрытия. После закрытия графического окна (closewindow) программа завершается.
Каждому событию соответствует своя процедурная переменная:
нажатие мыши OnMouseDown
отпускание мыши OnMouseUp
перемещение мыши OnMouseMove
нажатие клавиши OnKeyDown
отпускание клавиши OnKeyUp
нажатие символьной клавиши OnKeyPress
изменение размеров графического окна OnResize
закрытие графического окна OnClose
До начала работы программы эти переменные имеют нулевые значения.
Чтобы при возникновении некоторого события выполнить определенное действие, необходимо в программе присвоить процедурной переменной конкретную процедуру, выступающую в роли обработчика события. При возникновении одного из перечисленных выше событий проверяется, содержит ли соответствующая процедурная переменная ссылку на процедуру-обработчик, и если да, то данная процедура-обработчик вызывается.
Параметры x и y в обработчиках OnMouseDown, OnMouseUp и OnMouseMove определяют координаты курсора мыши в момент наступления события, параметр mousebutton равен 0, если кнопка мыши не нажата, 1, если нажата левая кнопка мыши, и 2, если нажата правая кнопка мыши. Параметр key в обработчиках OnKeyDownи OnKeyUp определяет виртуальный код нажатой клавиши. Параметр ch в обработчике OnKeyPress определяет нажатый символ. Если переменная-событие OnKeyPress имеет обработчик, то графическое окно не закрывается по нажатию клавиши Esc.
Например, если определена следующая процедура-обработчик, и в основной программе она привязана к соответствующей переменной-событию: OnMouseDown:=MouseDown; , то всякий раз при щелчке мышью в графическом окне в окно вывода будет выводиться 1.
Пример: Программа, осуществляющая движение графического окна с помощью клавиатуры.
uses GraphABC,Events;
procedure KeyDown(Key: integer);
begin
case Key of
VK_Left: SetWindowLeft(WindowLeft-2);
VK_Right: SetWindowLeft(WindowLeft+2);
VK_Up: SetWindowTop (WindowTop-2);
VK_Down: SetWindowTop (WindowTop+2);
end;
end;
begin
OnKeyDown:=KeyDown;
end.