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

Примитивные типы объектов – это типы TObject, TPoint и TRect.

TObject – основа иерархии – это абстрактный базовый тип без полей. Этот объект является предком всех объектов TurboVision, за исключением TPoint и TRect.

TObject предоставляет три метода: Init, Free и Done. Конструктор Init формирует основу для всех конструкторов TurboVision, выполняя распре-деление памяти. Процедура Free освобождает это распределение. Done – абстрактный деструктор, который должен быть перекрыт в потомках.

Потомки TObject делятся на два больших семейства: видимые и невидимые элементы (объекты). Видимые элементы могут отображать себя на экране и обрабатывать события, посланные им. Невидимые объекты предоставляют набор утилит для обработки других объектов, включая видимые элементы, но они не могут быть визуализированы напрямую.

Типы TPoint и TRect не входят в иерархию объектов, но используются всеми видимыми элементами TurboVision.

TPoint - это просто объект позиции на экране (X, Y):

TPoint = object

X, Y : Integer;

end;

TRect (Rectangle – прямоугольник) содержит два поля A и B, оба типа TPoint, определяющих верхнюю левую и нижнюю правую границы прямоугольника, и предоставляет несколько невизуализирующих сервис-ных методов :

TRect = object

A, B : TPoint;

procedure Assign(XA, YA, XB, YB: Integer);

{ Этот метод назначает значения параметров полям прямоуголь-ника: A.X:=XA, A.Y:=YA, B.X:=XB, B.Y:=YB . }

procedure Copy(R: TRect);

{ Копирует границы прямоугольника, заданные в R: A.X:=R.A.X, A.Y := R.A.Y и т.д. }

procedure Move(ADX, ADY: Integer);

{ Перемещает прямоугольник: A.X:=A.X+ADX, A.Y:= A.Y+ADY, B.X:=B.X+ADX, B.Y:= B.Y+ADY . }

procedure Grow(ADX, ADY: Integer);

{ Изменяет размер прямоугольника: A.X:=A.X-ADX, A.Y:= A.Y-ADY, B.X:=B.X+ADX, B.Y:= B.Y+ADY . }

end;

Поскольку все видимые элементы TurboVision являются прямоуголь-никами, их конструкторы Init используют параметр Bounds типа TRect для определения области, которую они занимают.

Координатная система TurboVision отличается от общепринятой. Отличие заключается в том, что если большинство координатных систем устанавливает размер в символах на экране, то координатная система TurboVision указывает расстояние между символами. Например, если R – объект типа TRect, то R.Assign(0, 0, 0, 0) назначает прямоугольник без размера – только точка. Наименьший прямоугольник, который может содержать что-либо, создается R.Assign(0, 0, 1, 1). Рис.2 показывает TRect, созданный R.Assign(2, 2, 5, 4).

Рис.2. Координатная система TurboVision. Символы R заполняют область (2, 2, 5, 4), размеры которой легко определяются: SizeX = 5 - 2 = 3, SizeY = 4 – 2 = 2.

  1. Видимые элементы.

Все видимые элементы наследуются от TView - непосредственного потомка TObject. Следует отличать “видимый” и “отображаемый”, поскольку возможна ситуация, когда видимый элемент полностью или частично скрыт другими видимыми элементами.

Видимый элемент – это объект Turbo Pascal, который управляет прямо-угольной областью экрана. Любое действие программы в этой области будет контролироваться видимым элементом, отвечающим за данную область.

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

  • во-первых, он должен рисовать себя в любой момент и заполнять всю область, за которую он отвечает. Это важно, поскольку часто видимый элемент будет перекрываться другим видимым элементом, и когда этот другой элемент удаляется или перемещается, видимый элемент должен иметь возможность показать ту часть, которая была скрыта. Для возможности отображения себя на экране все видимые элементы должны перекрывать виртуальный метод TView.Draw;

  • во-вторых, он должен обрабатывать все события, которые приходят к нему. Как было замечено выше, объекты в TurboVision взаимодействуют посредством передачи событий. Это означает, что TurboVision управляет вводом от пользователя и передает его в соответствующие объекты программы. Видимые элементы должны знать, что делать, когда события воздействуют на них.

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

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

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

На экране пользователь видит только терминальные элементы. Группы являются «прозрачными» - они выводят на экран свои подэлементы.

Наилучший пример – TApplication (приложение). TApplication – это видимый элемент, который управляет областью экрана – в действитель-ности всем экраном. TApplication – это также группа, которая владеет тремя элементами: полосой меню (объект TMenuBar), панелью экрана (TDeskTop) и строкой статуса (TStatusLine). TApplication передает область экрана каждому из этих подэлементов. Полоса меню получает верхнюю строку, строка статуса – нижнюю строку, а панель экрана занимает все строки между ними. Сам объект TApplication не имеет представления экрана, его появление полностью определяется его подэлементами. Рис.3 показывает типичный экран TApplication.

Рис.3. Типичное разделение экрана TApplication – экран разделен на три области, принадлежащих объектам TMenuBar, TDeskTop и TStatusLine.

В примере, изображенном на рис.3, панель экрана TDeskTop (группа) имеет два подэлемента – объект фона TBackground и объект окна TWindow; т.е. панель экрана отображается посредством вывода своих подэлементов.

Объект TWindow, являясь также группой, видим благодаря своим подэлементам – TFrame, TScrollBar и TScroller. Сам объект TWindow, как и любую группу, можно представить себе как прозрачную панель, закрывающую отведенную ему область (рис.4).

Рис.4. Окно (TWindow) и его подэлементы: рамка (TFrame), полосы скроллинга (TScrollBar) и объект скроллинга текста (TScroller). Подэлементы при выводе накладываются друг на друга, создавая образ окна.

Рассмотрим основные поля TView, специфичные для видимых элементов:

Origin : TPoint; { Смещение левого верхнего угла элемента

относительно левого верхнего угла владельца. }

Size : TPoint; { Размер видимого элемента. }

Cursor : TPoint; { Положение аппаратного курсора внутри

видимого элемента. }

Owner : PGroup; { Указывает на владельца. }

Next : PView; { Указывает на следующий равный видимый

элемент, т.е. принадлежащий тому же владельцу, что и данный. }

GrowMode : Byte; { Определяет, как видимый элемент будет

изменять размеры при изменении размеров владельца. }

DragMode : Byte; { Определяет поведение видимого элемента при

перемещении. }

State : Word; { Отображает текущее состояние элемента. }

Options : Word; { Определяет поведение видимого элемента. }

EventMask : Word; { Определяет, какие события будет обрабатывать

видимый элемент. }

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

Поля Owner и Next необходимы для связывания действующих видимых элементов программы в общий список – дерево видимых элементов. Внутри группы подэлементы объединяются в циклический список посредством указателей Next (рис.5). Поле Owner каждого из подэлемен-тов указывает на их общего владельца – объект-группу. Для обеспечения удобного движения по списку TView предоставляет несколько функций – Prev, NextView и PrevView. Prev возвращает указатель на предыдущий подэлемент, функции NextView и PrevView интерпретируют список как линейный.

Д ля связи группы со списком служит поле TGroup.Last типа PView, хранящее указатель на последний подэлемент группы, а функция TGroup.First возвращает указатель на первый подэлемент.

Рис.5. Список подэлементов группы.

Группа имеет специальные методы для вставки и удаления элементов.

Для вставки элементов в группу служит процедура TGroup.Insert(P: PView), где P – указатель на вставляемый объект. Каждый следующий элемент, вставляемый в группу, располагается на вершине списка, т.е. становится первым в списке подэлементов.

Метод TGroup.Delete(P: PView) удаляет подэлемент с указателем P из группы и перерисовывает другие элементы, если требуется (TGroup.Delete не освобождает P).

П орядок, обратный порядку вставки, называется Z-порядком (рис.6). Термин «Z-порядок» указывает на трехмерные взаимосвязи видимых элементов. Поскольку видимые элементы могут перекрываться (например, окна на панели экрана), их прорисовка происходит всегда в порядке, обратном Z-порядку. Порядок следования подэлементов в списке может меняться во время работы программы. Так, когда пользователь отмечает мышкой неактивное окно на панели экрана, оно, становясь активным, перемещается на вершину списка подэлементов панели экрана и располагается перед всеми другими окнами.

Рис.6. Z-порядок и порядок вставки.

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