Реферат: Turbo Vision
его следует поместить в рабочую область, вместо метода 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.Создается оно обычно с помощью стандартной
подпрограммы 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).У окон и диалоговых окон много общего, т.к. диалоговое окно
является непосредственным потомком окна, однако есть и принципиальные
различия, главным образом, в их предназначении, наборе стандартных
элементов, цветовой палитре.Можно сказать, что основное назначение
окон - просмотр той или иной информации, а диалоговых окон - ввод в
программу данных.Диалоговые окна обладают рядом дополнительных возмож-
ностей и более логически завершены, поэтому они чаще используются в
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13