Смекни!
smekni.com

титься к этим методам.

Деструктор выполняет действия, обратные действиям конструктора, и

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

методы.Сам деструктор также является виртуальным.

Переопределенный метод предка позволяет, используя возможности

исходного метода, модифицировать их, добавить в них некоторые дополни-

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

метод должен быть виртуальным.

Специфический для данного объекта метод - это метод, который не

имеет аналогов у предка данного объекта.

Создание отображаемого объекта

Если отображаемый объект не размещен постоянно в сегменте данных

(не задана соответствующая переменная конкретного типа-объекта), необ-

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

не размещаются постоянно в сегменте данных и создаются только на время

работы с ними; немодальные объекты могут и одного, и другого вида, но

чаще все-таки также не размещаются постоянно в сегменте данных.Созда-

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

труктор Init.

Помещение отображаемого объекта в группу

После создания отображаемого объекта его следует поместить в со-

ответствующую группу : если он является элементом окна, то в соответс-

твующее окно, если же он сам является окном, то в рабочую область

DeskTop.

У каждого объекта-группы имеются методы Insert и InsertBefore, с

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

группу.

Для размещения немодального окна в рабочей области вместо метода

Insert лучше воспользоваться методом InsertWindow :

function tProgram.InsertWindow(P: pWindow): pWindow;

где P - указатель на размещаемое окно; результат - указатель на разме-

щенное окно, и nil - если не размещено.

Метод является функцией, которая перед размещением окна проверяет

допустимость такой операции (имеется ли необходимая область памяти и

правильно ли сконструированы окно и его компоненты).

Задание параметров воображаемому объекту

В Turbo Vision принят следующий стандартный способ передачи пара-

метров.Для объекта-группы или его потомка формируется переменная ти-

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

дэлементов группы.Поля должны идти в той же последовательности, в ка-

кой подэлементы включались в группу.Для каждого подэлемента параметры

создаются по-своему.Для стандартных элементов параметры должны быть

следующими :

- строка ввода - строка того же размера;

- триггерный список - число типа Word, в котором каждый бит опре-

деляет состояние соответствующего элемента списка;

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

номер выделенного элемента списка;

- триггерный список с несколькими состояниями - информация разме-

ром в 4 байта, определяющая состояние каждого элемента списка

(под каждый элемент может отводиться 1,2,4 и 8 бит информации;

- список коллекции строк - запись размером в 6 байт, первое поле

которой - указатель на коллекцию просматриваемых строк, а вто-

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

ного элемента списка;

- параметрический текст - по 4 байта на каждый параметр.

Для нестандартных элементов пользователь сам определяет вид и

размер параметра.

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

помощью метода SetData :

procedure <отображаемый объект>.SetData (var Rec); virtual;

где Rec - передаваемая запись с данными.

Работа с модальными объектами

Для работы с модальными отображаемыми объектами используются ме-

тоды, выполняющие комплексные действия.

Универсальным является метод ExecView объекта tGroup :

function tGroup&ExecView(P: pView): Word;

где P - объект, с которым происходит работа; результат - код команды,

вызвавшей прекращение работы с объектом P.

Этот метод помещает воображаемый объект в группу, делает его мо-

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

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

отображаемым модальным объектом, удаляет отображаемый объект из груп-

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

ность, что осуществляется с помощью процедуры EndModal объекта tView :

procedure tGruop.EndModal(Command: Word); virtual;

где Command - код команды, при которой снимается модальность.

В качестве результата функция ExecView возвращает код команды,

вызвавшей прекращение работы с модальным отображаемым объектом.После

удаления из группы сам отображаемый объект из динамической памяти не

удаляется.

Если модальный отображаемый объект является диалоговым окном и

его следует поместить в рабочую область, вместо метода ExecView целе-

сообразно использовать метод ExecuteDialog :

function tProgram.ExecuteDialog(P: pDialog;Data: Pointer): Word;

где P - диалоговое окно, с которым происходит работа;

Data - указатель на запись с передаваемыми данными;

результат - код команды, вызвавшей прекращение работы и диалоговым ок-

ном P.

СОЗДАНИЕ МЕНЮ

Turbo Vision позволяет создать меню программы,предназначенное для

выбора дальнейшего пути решения задачи.

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

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

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

структуру программы.В Turbo Vision можно использовать либо обычное

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

Создание разворачивающегося меню

Разворачивающееся меню (в дальнейшем - просто меню) может иметь

довольно сложную структуру и любое число уровней вложенности, но сос-

тавляется из однотипных элементов, правда имеющих три варианта : собс-

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

выполнить при выборе этого элемента), подменю, при выборе которого на

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

тельная линия, которая имеет чисто декоративное назначение и позволяет

отделять в подменю те или иные группы элементов друг от друга.

Элемент меню имеет структуру типа-запись (стандартный тип

tMenuItem) :

tMenuItem = record

Next: pMenuItem;

Name: pString;

Command: Word;

Disabled: Boolean;

KeyCode: Word;

HelpCtx: Word;

case Integer of

0: (Param: pString);

1: (SubMemu: pMenu);

end;

end;

где Next - указатель на следующий элемент этого же уровня вложенности,

если следующего элемента нет, указатель равен nil;

Name - указатель на строку, содержащую выводимый на экран текст;

этот параметр равен nil, если элемент представляет собой разделитель-

ную линию;

Commаnd - код команды, которую следует выполнить при выборе данно-

го элемента меню; эта величина равна нулю, если данный элемент - под-

меню;

Disabled - признак разрешения или запрета выбора данного элемента

меню;

KeyCode - код клавиши или их совокупности быстрого управления, с

помощью которых можно выполнить команду данного элемента меню, не вы-

зывая это элемент, или 0, если для данного элемента такой клавиши не

предусмотрено;

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

екта tView, но справочная система выдает информацию об элементе меню;

Param - указатель на строку с дополнительной информацией, которая

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

менту (обычно это название клавиши быстрого управления);

SubMemu - указатель на структуру меню следующего уровня, если дан-

ный элемент представляет собой подменю.

ню.

Горизонтальные размеры выводимой на экран строки для любого эле-

мента меню ограничены 31 символом.В связи с этим в Turbo Vision имеет-

ся стандартный тип строк tMenuStr :

tMenuStr = string[31];

который и используется для задания символьной информации элементам ме-

ню.

Для каждого элемента меню можно в его названии выделить одну ла-

тинскую букву или цифру для быстрого выбора элемента путем нажатия

этой клавиши на клавиатуре (для основного меню - в сочетании с клави-

шей Alt).Такая буква выделяется в тексте символами ~~,например, ~N~ew.

В данном примере соответствующий элемент можно активизировать на-

жатием клавиши N (или Alt+N, если это элемент основного меню).На экра-

не такая буква выделяется особым цветом.

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

используется подпрограмма NewItem :

function NewItem(Name, Param: tMenuStr; KeyCode: Word; Command:

Word; AHelpCtx: Word; Next: pMenuItem): pMenuItem;

где Name - текстовая информация для данного элемента, она не должна

быть пустой строкой;

Param - дополнительная текстовая информация для элемента;

KeyCode - код клавиши быстрого управления;

Command - код выполняемой команды, не должен равняться 0;

AHelpCtx - параметр контекстной помощи;

Next - указатель на следующий элемент меню данного уровня;

результат - указатель на созданный элемент меню.

Для создания элемента меню, представляющего собой подменю, ис-

пользуется подпрограмма NewSubMenu :

function NewSubMenu(Name: tMenuStr; AHelpCtx: Word; SubMenu:

pMenu; Next: pMenuItem;

где Name - текстовая информация для данного элемента, не должна быть

пустой строкой;

AHelpCtx - параметр контекстной помощи;

SubMenu - указатель на структуру подменю;

Next - указатель на следующий элемент подменю данного уровня;

результат - указатель на созданный элемент меню.

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

ся подпрограмма NewLine :

function NewLine(Next: pMenuItem): pMenuItem;

где Next - указатель на следующий элемент меню данного уровня;

результат - указатель на созданный элемент меню.

Функционально разворачивающееся меню состоит из нескольких частей

- главного меню, постоянно отображаемого на экране, и ряда подменю,

появляющихся на экране по мере необходимости.Главное меню представляет

собой объект типа tMenuBar.Создается оно обычно с помощью стандартной