- •Объекты и события в 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.
Выбор и активизация видимых элементов.
Как правило, пользователь взаимодействует с одним, выбранным им, объектом (например, TMenuBar), или группой объектов (TWindow). При этом ввод пользователя должен попадать именно в выбранный объект. Для требуемой передачи событий в дереве программы создается цепочка выбранных элементов.
Внутри каждой группы может быть только один выбранный элемент. Объект-владелец группы сохраняет указатель на выбранный подэлемент в поле Current типа PView, наследуемом от TGroup. Если ни один из подэлементов группы не выбран, поле Current не содержит указателя (Current=nil). Выбранный подэлемент имеет установленный флаг sfSelected. Атрибут ofSelectable поля Options определяет, может ли данный элемент быть выбранным внутри своего владельца. Так, например, у рамки и полос скроллинга окна атрибут ofSelectable не установлен и они не могут выбираться.
Выбранные элементы, образующие непрерывную цепочку, начиная от TApplication, называются сфокусированными и имеют установленный флаг sfFocused (рис.8). По этой цепочке и будет передаваться ввод пользователя.
Флаг sfActive устанавливается в поле State окна и всех его подэлементов, если окно выбрано и сфокусировано, т.е. когда оно становится активным. Установка флага активности позволяет подэлементам окна изменять свой вид при активизации окна; например, объект рамки TFrame перекрывает метод TView.SetState следующим образом:
procedure TFrame.SetState(AState: Word; Enable: Boolean);
begin
TView.SetState(AState, Enable);
{ сначала вызывает наследуемый метод }
if AState and (sfActive + sfDragging) <> 0 then DrawView;
{ перерисовывает рамку, если она изменяет активность или перемещается }
end; ,
при установленном флаге sfActive рамка рисуется двойной, иначе – одинарной.
Флаг sfModal устанавливается, когда видимый элемент становится модальным. Модальность – особый режим взаимодействия видимых элементов. Модальный видимый элемент является корнем локального дерева событий: события обрабатываются только внутри дерева, образованного модальным элементом и его прямыми и косвенными подэлементами; другим видимым элементам события недоступны.
Сделать элемент модальным можно, вставив его в группу с помощью функции TGroup.ExecView(P: PView), где P – указатель на вставляемый объект. Метод ExecView сначала фиксирует текущее состояние (модальный элемент, выбранный подэлемент группы), затем делает P модальным, вызывая P^.SetState(sfModal, True), вставляет P в группу (если он еще не вставлен) и вызывает функцию P^.Execute, которая должна осуществлять получение и обработку событий, пока P остается модальным. По завершении модального состояния объекта P группа возвращается в исходное состояние. Если до вызова ExecView объект P не был подэлементом группы, то группа удаляет его из списка, не освобождая. Результат, возвращаемый P^.Execute (код завершения модального состояния), выдается как результат вызова функции ExecView.
Пример модального элемента – диалоговое окно. Когда диалоговое окно вставляется в панель экрана с помощью TDeskTop.ExecView, только оно и его подэлементы активны (исключение – строка статуса всегда остается активной). Диалоговое окно получает события и управляет ими до тех пор, пока пользователь не закроет его, нажав кнопку «OK», «Cancel» или отметит закрывающую кнопку на рамке окна.
Видимых элементов, имеющих установленный флаг sfModal, в программе может быть несколько, но действительно модальным, т.е. получающим и обрабатывающим события, является только один – тот, который был вызван для модального выполнения последним (например, при вложенных вызовах диалоговых окон).
Функция TView.TopView возвращает указатель на текущий модальный видимый элемент.