Смекни!
smekni.com

подпрограммы New, а инициализируется конструктором Init :

сonstructor tMenuBar.Init(var Bounds: tRect; AMenu: pMenu);

где Bounds - область на экране для главного меню;

AMenu - указатель на главное меню.

Создавая меню программы, следует позаботиться лишь о размерах ос-

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

при их отображении на экране.Стандартный объект tProgram ( а, следова-

тельно, и объект tApplication) имеет метод InitMenuBar :

procedure tProgram.InitMenuBar; virtual;

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

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

ню в стандартную типизированную константу MenuBar пакета Turbo Vision.

Создание локального меню

При работе с программой часто приходится многократно повторять

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

некоторых в меню вообще не может быть).Количество их обычно небольшое,

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

одно дополнительное меню, доступ к которому осуществляется по тому или

иному событию, например, команде, нажатию клавиши клавиатуры или мыши.

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

пакета Turbo Vision - tMenuPopup.Для этого в метод HandleEvent основ-

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

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

ню.Так как локальное меню должно быть довольно простым, оператор его

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

тем не менее состоять из обращений к тем же методам.

Создавать локальное меню целесообразно на завершающих этапах соз-

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

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

Несмотря на свою сложность, меню в силу своей специфики группой

не является, и у него имеется свой своеобразный механизм обработки со-

бытий.Так, например, если меню получит событие от мыши, когда курсор

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

тупила команда завершения работы с объектом без фиксации результата.В

случае же модального объекта группы (например, диалогового окна) такое

событие игнорируется.

СОЗДАНИЕ ОКОН И ДИАЛОГОВЫХ ОКОН

После того, как будет выбрано меню программы, целесообразно прис-

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

ветствующие команды меню и строки состояния.Часто эти команды требуют

использования различных окон для передачи информации.Окна могут потре-

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

ды.

Основным средством взаимодействия пользователя с программой в

Turbo Vision являются окна (тип tWindow) и диалоговые окна (тип

tDialog).У окон и диалоговых окон много общего, т.к. диалоговое окно

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

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

элементов, цветовой палитре.Можно сказать, что основное назначение

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

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

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

программах.

Окна (tWindow) в Turbo Vision

Окном в TurboVision называется отображаемый объект-группа, имею-

щий специальную рамку и который может иметь средства прокрутки (скро-

ллинга) не умещающейся в окне информации.В него можно поместить инфор-

мацию.Как правило, в программе используется не окно типа tWindow, а

его потомок с переопределенными методами.

В дополнение к параметрам объекта tGroup окно обладает рядом до-

полнительных параметров, отметим два : флаги окна Flags и используемая

палитра Pallete.Назначение флагов параметра Flags, и константы, соот-

ветствующие единице в соответствующем разряде параметра Flags следую-

щие :

0-й бит (wfMove) - возможность перемещения окна по полю его вла-

дельца

1-й бит (wfGrow) - возможность изменения размеров окна.

2-й бит (wfClose) - наличие пиктограммы закрытия окна.

3-й бит (wfZoom) - наличие пиктограммы распахивания окна.

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

принимать одно из трех следующих значений :

wpBlueWindow = 0 - синяя палитра окна;

wpCyanWindow = 1 - голубая палитра окна;

wpGrayWindow = 2 - серая палитра окна.

Как правило, синяя палитра - для окон, серая - для диалоговых

окон, а голубая - для вспомогательных окон.

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

constructor tWindow.Init(var Bounds: tRect;

ATitle: tTitleStr; ANumber: Integer);

где Bounds - размеры окна;

ATitle - имя окна размером до 80 символов;

ANumber - номер окна.

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

Характерной особенностью окна и его потомков является наличие

рамки - специального отображаемого объекта, помещаемого в окно.Таким

образом, окно всегда имеет хотя бы один подэлемент.Рамка окна помимо

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

окне.

Вид рамки окна меняется в зависимости от его состояния.Активное

окно обрамлено двойной рамкой.

В левой части верхней линии рамки располагается пиктограмма зак-

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

левой клавиши окно закрывается.

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

ваемое при его инициализации.

В правой части верхней линии рамки находится пиктограмма распахи-

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

чено окно,Распахивание также осуществляется с помощью мыши.После рас-

пахивания окна пиктограмма изменит свой вид - "двустороняя стрел-

ка".Чтобы восстановить исходные размеры окна, следует повторно подвес-

ти окно, а затем снова его сжать можно и другим способом.Для этого

следует поместить курсор мыши на верхнюю линию рамки окна и дважды на-

жать клавишу.

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

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

этом случае с помощью мыши можно изменять размеры окна.Для этого кур-

сор мыши поместить на этот угол, нажать на клавишу и, не отпуская ее,

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

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

зонтали и 6 строк по вертикали.Эти ограничения можно изменить с по-

мощью метода SizeLimits :

procedure'tView.SizeLimits(var Min, Max: tPoint); virtual;

Верхняя линия позволяет в ряде случаев с помощью мыши перемещать

окно по полю его владельца.

Наличие или отсутствие у окна этих возможностей зависит от уста-

новленных флагов параметра Flags.

При работе с окном его следует сначала создать и инициализиро-

вать.При этом создать необходимые компоненты (кроме рамки, которая

создается автоматически) и поместить их в окно.

Далее окно следует поместить в рабочую область.Как правило, окно

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

да InsertWindow, а если окно модальное - при помощи метода ExecView.

Как правило, для окна следует переопределить метод обработки со-

бытий HandlEvent, где необходимо предусмотреть обработку предназначен-

ных для окна событий.

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

мощью метода EndModal.

Если окно содержит выделенный элемент, а нужно сделать выделенным

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

элементу и нажав клавишу, либо с помощью клавиши клавиатуры Tab

(или Shift+Tab), при этом нажатие Tab выделит следующий в Z-порядке

элемент, а Shift+Tab - предыдущий.

Элементы окон в Turbo Vision

В качестве стандартных элементов окон Turbo Vision можно исполь-

зовать поля скроллинга (тип Scroller), предназначенные для отображения

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

буферированной информации (тип tTewtDevice), текстовые элементы для

пассивных терминалов (тип tTerminal) наподобие текстовых файлов и ли-

нейки скроллинга.В окне можно помещать также потомки перечисленных вы-

ше стандартных элементов.

Поле скроллинга (tScroller)

Поле скроллинга предназначено для размещения в нем текстовой ин-

формации, которую необходимо вывести в окно, и которая возможно не

уменьшается целиком в поле окна.

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

нейки горизонтального и вертикального скроллинга :

constructor tScroller.Init(var Bounds: tRect;

AHScrollBar, AVScrollBar: pScrollBar);

где Bounds - размеры поля;

AHScrollBar, AVScrollBar - указатели на вертикальную и горизон-

тальную линейку скроллинга.

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

этого, при инициализации потомка tScroller могут быть заданы параметры

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

ный размер текстовой информации (размер строк и число строк), размеща-

емой в поле скроллинга.

Следует также переопределить метод Draw объекта tScroller для

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

этого необходимо в начале определить, какая часть информации должна

быть отображена (исходя из текущего состояния линеек), затем сформиро-

вать строки, которые необходимо вывести на экран и, наконец, поместить

сформированные строки в поле скроллинга, с атрибутами цвета.

Текстовый элемент буферированной информации

Текстовый элемент буферированной информации (тип tTextDevice) яв-

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

двух абстрактных методов, которые читают из некоторого текстового бу-

фера и записывают в текстовый буфер отображаемую информацию.