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

Между видимыми элементами программы существуют два вида связей: связь в иерархии объектов и связь по принадлежности объектов в программе.

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

Связи в иерархии и по принадлежности могут не совпадать (TFrame не является потомком TWindow, но принадлежит TWindow).

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

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

Рис.7. Дерево видимых элементов программы (дерево принадлежности).

  1. Поля State и Options.

Поле State (состояние) содержит информацию о состоянии видимого элемента. Поле State интерпретируется как битовое поле, в котором каждому биту соответствует некоторый флаг состояния, и установка бита в 1 или 0 означает наличие или отсутствие у видимого элемента соответствующего флага состояния. Для доступа к битам поля State по соглашению TurboVision используются константы с именами sfXXXX (state flag), где XXXX – имя флага состояния. В Таблице 1 приведены определенные в TurboVision константы sfXXXX.

Начальная установка флагов состояния происходит в конструкторе Init объекта, затем поле State изменяется, отображая текущее состояние видимого элемента.

Поле State никогда не должно изменяться напрямую, для этого следует использовать наследуемый от TView виртуальный метод SetState(AState: Word; Enable: Boolean), который устанавливает (если Enable=True) или очищает (Enable=False) биты, заданные параметром AState. Кроме установки битов, TView.SetState выполняет некоторые действия для отображения нового состояния, такие, как перерисовка других видимых элементов при скрытии данного (при очищении флага sfVisible) или перепрограммирование аппаратуры при изменении формы курсора (изменение флагов sfCursorVis и sfCursorIns). Потомки TView могут перекрывать SetState для реализации действий, основанных на изменении флагов состояния, но должны всегда вызывать наследуемый метод для изменения битов поля State.

На рис.8 приведен пример дерева программы с установленными флагами состояния элементов.

Рис.8. Дерево видимых элементов с установленными флагами состояния (V, E, M, S, F, A обозначают соответственно флаги sfVisible, sfExposed, sfModal, sfSelected, sfFocused, sfActive). Цветом выделена цепочка сфокусированных элементов.

Таблица 1. Константы sfXXXX.

Константа

Значение

Назначение флага

sfVisible

sfCursorVis

sfCursorIns

sfShadow

sfActive

sfSelected

sfFocused

sfDragging

sfDisabled

sfModal

sfExposed

$0001

$0002

$0004

$0008

$0010

$0020

$0040

$0080

$0100

$0200

$0800

Установлен, ecли видимый элемент ви­ден в своем владельце. Методы TView.Show и TView.Hide могут использоваться для модификации sfVisible. При установленном sfVisible видимый элемент необязатель­но видим на экране, поскольку его владелец может быть невидим. (По умолчанию установлен.)

Установлен, ecли курсор видимого элемента видим, в противном случае очи­щен. Методы TView.ShowCursor и TView.HideCursor могут использоваться для модификации sfCursorVis. (По умолчанию очищен.)

Установлен, если курсор видимого эле­мента – сплошной блок, очищен, если курсор – линия. По умолчанию очищен. Методы TView.BlockCursor и TView.NormalCursor могут использо-ваться для модификации sfCursorIns.

Установлен, если видимый элемент име­ет тень, в противном случае очищен.

Установлен, если видимый элемент – активное окно или подэлемент активного окна.

Установлен, если видимый элемент – текущий выбранный подэлемент внутри своего владельца. Каждый объект-группа имеет поле Current, которое указывает на текущий выбранный подэлемент (или nil, ecли подэлементов не выбрано). Может быть только один выбранный подэлемент в группе.

Установлен, если видимый элемент сфокусированный. Видимый элемент – сфокусированный, если он выбран и все вла­дельцы выше его также выбраны, т.е. если видимый элемент находится в цепи, oбpaзованной указателями Current всех групп, начиная с TApplicalion (самый верхний видимый элемент в дереве видимых элементов). Последний види-мый элемент этой цепи — конечное назна­чение для всех сфокусированных собы­тий.

Установлен, если видимый элемент перемещается, иначе очищен.

Установлен, если видимый элемент за­прещен; очищен, если разрешен.

Установлен, если видимый элемент – модальный. Модальный видимый элемент представляет вершину (корень) активного дерева событий, получая события и управляя ими до тех пор, пока не будет вызван его метод EndModal. Модальным видимый элемент становится, когда происходит его вставка в группу посредством метода TGroup.ExecView (например, при вставке диалогового окна).

Установлен, если у видимого элемента прямой или косвенный владелец - объ­ект TApplication и, следовательно, элемент может быть виден на экране.

Поле Options (опции) содержит набор атрибутов, определяющих различия в поведении видимых элементов. Это также битовое поле: установка позиции бита в 1 указывает, что видимый элемент имеет отдельный атрибут, очи­стка битовой позиции означает, что атрибут отключен или запрещен. Для ссылок на битовые позиции поля Options определены константы ofXXXX (option flag), приведенные в Таблице 2.

Атрибуты Options устанавливаются в конструкторе объекта Init и не изменяются в процессе функционирования объекта.

Таблица 2. Константы ofXXXX.

Константа

Значение

Назначение атрибута

ofSelectable

ofTopSelect

ofFirstClick

ofFramed

ofPreProcess

ofPostProcess

ofBuffered

ofTileable

ofCenterX

ofCenterY

$0001

$0002

$0004

$0008

$0010

$0020

$0040

$0080

$0100

$0200

Уcтановлен, ecли видимый элемент может быть выбран внутри своего владельца, иначе – очищен.

Установлен, если видимый элемент помещается перед всеми другими равными видимыми элементами, когда он выбран. Окна (TWindow и его потомки) по умолчанию имеют этот бит установ­ленным, что заставляет их распола­гаться перед всеми другими окнами на панели экрана.

Если очищен, отметка мышкой невыбранного элемента только выбирает его. Если установлен, та­кая отметка мышкой выбирает видимый элемент и может далее обрабатываться как обычная отметка мышкой в выбранном элементе. Не имеет эффекта, если ofSelectable не уста­новлен.

Установлен, если видимый элемент имеет рамку. TWindow и его потомки имеют TFrame, как свой последний подэлемент.

Установлен, если видимый элeмент получает активные события до того, как они были переданы сфокусированному эле­менту.

Установлен, если видимый элемент получает активное событие в случае, когда сфокусированный элемент не обработал его.

Используется только для потомков TGroup. Установлен, если группа может иметь свой кэш-буфер. Кэш-буфер содержит видео-образ всей группы, увеличивая скорость перерисов-ки. При отсутствии буфера, TGroup.Draw вы­зывает методы каждого подэлемента DrawView. Если впоследствии New и GetMem не могут получить достаточнo памяти, буфера групп будут освобождать память.

Установлен, если панель экрана мо­жет расположить этот видимый эле­мент заполнением (или каскадом). Обычно используется только с объек­тами TWindow.

Установлен, если видимый элемент центрируется по оси Х своего вла­дельца при вставке в группу с исполь­зованием ТGroup.Insert.

Аналогично для Y.

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