Иллюстрированный самоучитель по Turbo Pascal

Маршрутизация событий

Как уже говорилось, любая программа, работающая в среде Turbo Vision, является прямым или косвенным (через TApplicatiori) потомком TProgram и основана на обращении к трем главным методам этого объекта: Init, Run и Done. Например:

Uses App,…;
type
TMyProgram = object (TApplication)
…..
end;
…..
var
MyProgram = TMyProgram;
…..
begin {Исполняемая часть программы:}
MyProgram.Init; {Инициировать программу}
MyProgram.Run; {Выполнить программу}
MyProgram.Done {Завершить работу}
end.

Процесс получения и обработки событий инициируется методом TProgram.Run, который для этого обращается к методу TGroup.Execute (любая.программа является потомком TGroup). Метод TGroup.Execute реализует следующий цикл:

var
Event: TEvent;
begin
Event.What: = evNothing; {Инициировать пустое событие}
repeat {Основной цикл программы}
if Event.What <> evNothing then
EventError(Event); {Событие не очищено – ошибка}
GetEvent(Event); {Получить событие}
HandleEvent(Event); {Передать событие обработчику}
until EndState <> Continue;
…..
end;

Метод GetEvent наследуется всеми видимыми элементами от TView и является основным источником событий. Этот метод вначале проверяет, не подготовил ли событие метод PutEvent и, если это так, возвращает его. Затем GetEvent проверяет клавиатуру и мышь. Если какое-то из этих устройств изменило свое состояние, метод формирует и возвращает соответствующее событие. Если изменения не произошло, GetEvent обращается к методу TProgram.Idle, чтобы запустить "фоновую" задачу (подробнее об этом см. п. 18.6).

С помощью вызова метода TGroup.Execute события всегда начинают свой путь с модального видимого элемента. Напомню, что модальный элемент определяет точку диалога; в программе в каждый момент времени есть один и только один модальный элемент (см. п. 17.4). В самом начале программы таким элементом является обычно экземпляр объекта TProgram или его потомка. Если в программе открыто модальное диалоговое окно, оно обратится к TGroup.Execute и, следовательно, путь событий начнется с этого окна. В любом случае начинает обработку события метод HandleEvent модального видимого элемента. Дальнейший маршрут события зависит от того, является ли событие позиционированным, активным или общим.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.