- •Объекты и события в turbo vision.
- •Глава 1. Объекты TurboVision.
- •Глава 2. События.
- •Глава 3. Взаимодействие видимых элементов.
- •Введение
- •Глава 1. Объекты turbo vision.
- •Иерархия объектов TurboVision. Принципы построения иерархии.
- •Примитивные типы объектов. Система координат TurboVision.
- •Видимые элементы.
- •Взаимосвязи между видимыми элементами.
- •Поля State и Options.
- •Выбор и активизация видимых элементов.
- •Глава 2. События.
- •Чтение ввода пользователя.
- •Виды событий.
- •События-сообщения. Команды. Разрешение и запрещение команд.
- •Запись события. Тип tEvent.
- •Цикл событий. Функция Execute.
- •Методы GetEvent и PutEvent. Централизация сбора событий.
- •Обработка событий. Метод HandleEvent.
- •Маршрутизация событий. Переменные FocusedEvents и PositionalEvents. Поле EventMask.
- •Глава 3. Взаимодействие видимых элементов.
- •Посредники.
- •Сообщения между видимыми элементами.
- •3. Кто обрабатывает общие сообщения.
- •4. Вызов процедуры HandleEvent.
Запись события. Тип tEvent.
Для упаковки и передачи событий в TurboVision определен специальный тип – запись с вариантами TEvent:
TEvent = record
What: Word;
case Word of
evNothing: ( );
evMouse: (
Buttons: Byte;
Double: Boolean;
Where: TPoint);
evKeyDown:(
case Integer of
0: (KeyCode: Word);
1: (CharCode: Char; ScanCode: Byte));
evMessage: (
Command: Word;
case Word of
0: (InfoPtr: Pointer);
1: (InfoLong: Longint);
2: (InfoWord: Word);
3: (InfoInt: Integer);
4: (InfoByte: Byte);
5: (InfoChar: Char));
end; .
Поле TEvent.What содержит информацию о виде события. Это битовое поле: каждому классу событий соответствует один бит (события от клавиатуры) или группа битов (события от мышки и события-сообщения) (см. рис.9). Для работы с битами TEvent.What определен набор констант evXXXX (Таблица 3).
Константы evNothing (пустое событие), evMouse (мышь), evKeyboard (клавиатура) и evMessage (сообщение) могут использоваться для маскирования событий; они позволяют быстро определить, к какому классу принадлежит событие. Например, для определения, является ли событие событием от мышки, удобно использовать код
if Event.What and evMouse <> 0 then DoMouseEvent; ,
не проверяя отдельно четыре первых бита TEvent.What.
Оставшиеся неопределенными биты TEvent.What программист может использовать для новых видов событий.
Рис.9. Структура поля TEvent.What.
Таблица 3. Константы evXXXX.
-
Константа
Значение
Назначение
evMouseDown
evMouseUp
evMouseMove
evMouseAuto
evKeyDown
evCommand
evBroadcast
$0001
$0002
$0004
$0008
$0010
$0100
$0200
Кнопка мышки нажата.
Кнопка мышки отпущена.
Мышка движется.
Кнопка мышки удерживается нажатой (авто-событие).
Клавиша нажата.
Событие-команда.
Событие-общее сообщение.
Маски для классов событий
evNothing
evMouse
evKeyboard
evMessage
$0000
$000F
$0010
$FF00
Пустое событие.
Событие от мышки.
Событие от клавиатуры.
Событие-сообщение (команда, общее сообщение или пользовательское сообщение).
В зависимости от содержания поля TEvent.What, заполняется та или иная группа полей из оставшихся в записи TEvent.
Если TEvent содержит запись события от мышки, то поле Buttons указывает, какая кнопка была нажата или отпущена, Double устанавливается в True, если было произведено двойное нажатие, а поле Where содержит координаты курсора мыши в координатной системе экрана TApplication.
В случае события от клавиатуры поле KeyCode содержит скэн-код нажатой клавиши.
Если же TEvent – запись события-сообщения, то в поле Command содержится код команды, а в одном из полей InfoPtr, InfoLong, InfoWord, InfoInt, InfoByte или InfoChar может помещаться дополняющая команду информация.
Пустому событию соответствует значение поля What, равное evNothing.