Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection.doc
Скачиваний:
29
Добавлен:
16.11.2019
Размер:
343.55 Кб
Скачать

Глава 2. События.

  1. Чтение ввода пользователя.

При написании обычных программ на Паскале, для получения ввода пользователя и его обработки часто используются блоки вида:

repeat

B := ReadKey; { чтение ввода пользователя }

case B of { обработка ввода }

‘i’ : InvertArray;

‘e’ : EditArray;

‘g’ : GraphicDisplay;

‘q’ : Quit := True;

end;

until Quit; .

Программа, управляемая событиями, не очень отличается от обычной по принципу. Однако, с точки зрения программиста, различия есть.

В программах на TurboVision ввод пользователя читается самой TurboVision, упаковывается в записи Паскаля, называемые событиями (Event), и передается видимым элементам программы для обработки.

К примеру, если пользователь отметил мышкой неактивное окно, программа обнаруживает это событие, упаковывает его и направляет вниз по дереву видимых элементов. Когда событие достигнет отмеченного окна, окно реагирует на него, становясь активным.

Видимые элементы TurboVision сами могут обрабатывать большую часть ввода: окно знает, как открыться, закрыться, переместиться, изменить размер; меню знает, как открыться, взаимодействовать с пользователем и закрыться; кнопки – как нажиматься и т.д.

Механизм передачи событий уже существует. Программист, в соответствии со своими задачами, определяет новые видимые элементы с новыми функциями, которые должны знать об определенных видах событий, заданных программистом, и реагировать на них.

  1. Виды событий.

События в TurboVision можно разделить на четыре класса:

1). События от мышки:

  • нажатие или отпускание любой кнопки мыши;

  • изменение позиции курсора мыши;

  • «авто»-событие (длительное удерживание кнопки мыши нажатой).

2). События от клавиатуры (нажатия клавиш).

3). События-сообщения – специальный вид событий для обеспечения взаимодействия видимых элементов программы между собой. События-сообщения бывают трех типов: события-команды, общие сообщения и пользовательские сообщения.

4). «Пустые» события, - этот класс событий включает в себя всего один элемент – пустое событие. Пустое событие не несет полезной информации и генерируется объектом, обработавшим «непустое» событие, для указания, что событие уже обработано. Объекты просто игнорируют пустые события.

  1. События-сообщения. Команды. Разрешение и запрещение команд.

События, циркулирующие внутри дерева видимых элементов, можно условно разделить на две группы – события внешние и внутренние. К первым относятся события, воздействующие на объекты программы извне – это события от мышки и клавиатуры; внутренние события генерируются самими объектами программы, к ним и относятся события-сообщения.

События-сообщения служат для передачи информации между взаимодействующими объектами. Необходимость использования сообщений следует из того, что объекты не могут связаться напрямую, т.к. не знают указателей друг на друга.

Событие-сообщение содержит команду, и объект, обнаруживший известную ему команду, реагирует на нее определенным образом. Каждой команде соответствует уникальный код – константа типа Word, имя которой, по соглашению TurboVision, имеет вид cmXXXX (command).

Например, объекты полосы скроллинга TScrollBar и скроллера текста TScroller, принадлежа объекту окна TWindow, оба находятся в списке подэлементов окна. Отметка мышью в полосе скроллинга передается TScrollBar и полоса скроллинга должна сообщить скроллеру, чтобы тот показал другую часть текста. Полоса скроллинга посылает общее сообщение, которое содержит команду cmScrollBarChanged и указатель на себя (т.е. на объект TScrollBar), и, когда TScroller обнаружит это сообщение, он может связаться с TScrollBar для получения новых параметров вывода текста.

Для уже определенных в TurboVision команд зарезервированы два диапазона: от 0 до 99 и от 256 до 999, остальные значения (100 - 255 и 1000 - 65535) программист может использовать для определения своих команд, без конфликтов с предопределенными командами.

Наличие двух диапазонов для команд связано с тем, что команды с кодами от 0 до 255 могут быть запрещены, что означает временную отмену их действия (на запрещенные команды объекты не реагируют). Для этого определена глобальная переменная типа TCommandSet = set of Byte; , в которой хранится набор разрешенных команд. Методы TView EnableCommands, DisableCommands, GetCommands, и SetCommands предназначены для получения и изменения текущего набора разрешенных команд.

Большинство внешних событий транслируется обрабатывающими их объектами в команды. Например, в меню каждому элементу соответствует некоторая команда, и выбор элемента меню приводит к генерации события-сообщения с соответствующей командой. Команды связываются с элементами меню в вызове конструктора объекта меню. Подобным образом объект кнопки (TButton) имеет ассоциированную с кнопкой команду, определяемую параметром ACommand в вызове конструктора TButton.Init:

TButton.Init(var Bounds: TRect; ATitle: TTitleStr; ACommand: Word;

AFlags: Byte); .

В TurboVision события-сообщения разделяются на два типа: события-команды и события-общие сообщения. От типа события-сообщения зави-сит, каким образом оно будет передаваться по дереву видимых элементов. Программист может ввести свой тип событий-сообщений – пользовательские сообщения, и задать способ их передачи.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]