|
Маршрутизация событий
Как уже говорилось, любая программа,
работающая в среде 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
модального видимого элемента. Дальнейший маршрут события
зависит от того, является ли событие позиционированным,
активным или общим.
|