Смекни!
smekni.com

следующий подэлемент группы.Поле Next последнего подэлемента указывает

на предыдущий подэлемент, поле Next предыдущего подэлемента указывает

на его предыдущий подэлемент и т.д.У первого подэлемента это поле ука-

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

группы образуют циклическую структуру.У каждого подэлемента группы по-

ле Owner (владелец) указывает на основной элемент группы.

Поля, указывающего на предыдущий подэлемент в группе у отображае-

мого объекта нет, однако у него есть метод Prev, который формирует

указатель на такой предыдущий подэлемент.Этот метод даст указатель на

первый подэлемент, если определяется предыдущий подэлемент последнего

подэлемента.

Оформление программы, использующей средства Turbo Vision.

Объекты tProgram И tApplication

В Turbo Vision имеются два объекта - tProgram и tApplication, на

основе которых можно создать интерактивную программу.

Объект tProgram является основой создаваемой программы и включает

общие действия, которые выполняются практически в любой интерактивной

программе.В первую очередь это обработка поступающих событий.tProgram

представляет собой отображаемый объект, занимающий все поле экрана.Он

является непосредственным потомком объекта tGroup и наследует все его

свойства.В частности, это позволяет в поле экрана разместить любые

отображаемые объекты.В свою очередь, этот объект имеет свои характер-

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

Инициализируется объект tProgram конструктором Init :

constructor tProgram.Init;

После инициализации устанавливаются значения парамет-

ров.ScreenWidth и ScreenHeight - параметры модуля Drivers, содержащие

размеры экрана в текстовом режиме.Параметр DeskTop (модуль App) - ука-

затель на рабочую область программы.Указатель на созданный объект

tProgram помещается в переменную Application (модуль App).

Важным методом объекта tProgram является метод Run :

procedure tProgram.Run; virtual;

представляющий собой цикл обработки событий и выполняющий, таким обра-

зом, основные действия, связанные с работой программы.

Объект tProgram позволяет разместить в поле экрана любые отобра-

жаемые объекты.Их можно помещать в поле экрана произвольным образом,

однако принята следующая система их расположения : в верхней строке

экрана размещается строка меню (тип tMenuBar или его потомок), в ниж-

ней части экрана размещается строка состояния (тип tStatusLine или его

потомок), остальная часть экрана отдается под рабочую область (тип

DeskTop или его потомок).Эти три объекта (tMenuBar, tStatusLine и

tDeskTop) также являются отображаемыми объектами, причем объект

tDeskTop является к тому же потомком объекта tGoup.

Объекты этих типов размещаются на экране автоматически при иници-

ализации программы методом Init.Для размещения меню, строки состояния

и рабочей области вызываются методы InitMenuBar, InitDeskTop и

InitStatusLine.Методы InitMenuBar и InitStatusLine переопределяются,

метод же InitDeskTop обычно не меняется (его следует переопределить,

если у программы нет меню или строки состояния, с тем, чтобы соответс-

твующим образом изменить его размеры).

Рабочая область инициализируется конструктором Init :

constructor tDeskTop.Init((var Bounds: tRect);

где Bounds - размеры рабочей области.

Объект tApplication является непосредственным потомком объекта

tProgram и наследует все его свойства.Кроме этого, он предназначен для

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

видеосистему, систему обработки событий и т.д., которые могут быть

инициализированы с помощью конструктора Init этого объекта :

constructor tApplication.Init;

а ликвидированы с помощью деструктора Done :

destructor tApplication.Done; virtual;

При инициализации этого объекта его параметры принимают те же

значения, что и у его предка tProgram.

Сформированная на основе объекта tApplication программа обычно

выполняет последовательно три операции : инициализацию программы, об-

работку событий и завершение работы программы.

Инициализация программы, если не требуется каких-либо специальных

дополнительных действий, представляет собой простое обращение к конс-

труктору Init объекта tApplication (или его потомка), который инициа-

лизирует оболочку программы, после чего обращается к конструктору объ-

екта tProgram, который, в свою очередь, выполняет действия, связанные

с инициализацией программы как таковой, устанавливая исходные значения

ее параметров и размещая на экране меню, строку состояния и рабочую

область.

Обработка событий осуществляется методом Run объекта tProgram

(этот метод доступен и объекту tApplication или его потомку).

Завершение работы программы выполняет деструктор Done.

Обычно тело любой программы и состоит из обращения к этим трем

методам.

СТРУКТУРА ОТОБРАЖАЕМЫХ ОБЪЕКТОВ ПРОГРАММЫ

Все отображаемые объекты образуют древовидную структуру, корнем

которой является сама программа - потомок объекта tApplication (напри-

мер, рис. 2).

┌──────────────────────┐

│──────────────────────│

│ Программа │

└───────────┬──────────┘

┌────────────────────────┴───────────────────────┐

│ │ │

┌─────────────────┐ ┌───────────┴──────────┐ ┌─────────────────┐

│ Меню │ │──────────────────────│ │Строка состояния │

└─────────────────┘ │ Рабочая область │ └─────────────────┘

└───────────┬──────────┘

┌────────────└────────────┐

│ │

┌────────┴────────┐ ┌───────────┴─────────┐

│ Окно │ │─────────────────────│

└────────┬────────┘ │ Диалоговое окно │

│ └─────────┬───────────┘

┌───────────┘───┐ │

│ │ ┌─────┴─────────┐

│ │ │ │ │

┌─────┴────┐ ┌───────┴──┐ ┌─────┴────┐│┌────────┴──────────┐

│ Рамка │ │ Кнопка │ │ Рамка │││───────────────────│

└──────────┘ └──────────┘ └──────────┘││ Строка ввода │

│└───────────────────┘

┌─────└───────┐

│ │

┌─────┴────┐ ┌─────┴──────┐

│ Кнопка │ │Строка ввода│

└──────────┘ └────────────┘

Рис.2 Пример структуры отображаемых объектов программы

Здесь основным отображаемым объектом является программа - потомок

tApplication.Он является группой, в которую входят меню (потомок

tMenuBar), рабочая область (тип tDeskTop) и строка состояния (потомок

tStatusLine).Рабочая область, в свою очередь, является группой, в ко-

торую входят окно и диалоговое окно.Окно и диалоговое окно также явля-

ются группами, включающими различные подэлементы (рамки, строки ввода,

кнопки).

Каждый отображаемый объект может быть в одном из двух состояний -

пассивном и выделенном.На рис. выделенные объекты обозначены двойной

верхней чертой.В каждой группе может быть только один выделенный объ-

ект (или ни одного, если сама группа не является выделенным объек-

том).Указатель на выделенный элемент находится в переменной Current

объекта-группы.Если какой-то объект группы становится выделенным, пре-

дыдущий выделенный объект этой группы становится пассивным.

Сделать выделенным предыдущий или последующий объект группы можно

с помощью метода SelectNext :

procedure tGroup.SelectNext(Forwards: Boolean);

где Forwards - параметр, определяющий, какой объект следует выделить :

если Forwards = True, выделяется следующий в Z-порядке объект группы.

Этот метод не проверяет правильность введенных данных в текущем

выделенном объекте и всегда выделяет другой элемент.Если необходимо

проверять правильность введенных данных, следует вместо этого метода

использовать метод FocusNext :

function tGroup.FocusNext(Forwards: Boolean): Boolean;

где Forwards - тот же параметр; результат - True, если произошло пе-

реключение на другой объект, и False - в противном случае.

Выделенный объект - это тот объект, с которым в настоящее время

происходит работа.Так, в рассматриваемом примере выделенной является

рабочая область - с окнами, расположенными в ней, пользователь может

взаимодействовать.Меню и строка состояния в этом случае являются пас-