Иллюстрированный самоучитель по Turbo Pascal

Формирование меню

Вернемся к смысловой части нашего примера и подумаем о том, какие еще свойства следует придать программе. Поскольку мы предполагаем работу с файлом, можно включить в программу код, реализующий строку меню с опцией "Файл", связав с этой опцией такие действия, как открытие уже существующего файла данных и/или создание нового. Здесь же можно предусмотреть возможность альтернативного выхода из программы. Кроме того, в главное меню следует поместить еще одну опцию, назовем ее "Работа". Эта опция должна открыть доступ к содержательной части программы. С учетом сказанного программу нужно дополнить следующими строками:

const
{Команды для обработчиков событий:}
cmWork = 203; {Обработать данные}
cmDOS = 204; {Временно выйти в ДОС}
WinComl: TCommandSet = [cmSave,cmWork]; {Множество временно недоступных команд}

Эти строки следует вставить сразу после предложения Uses; они определяют коды команд, которые будут затем использоваться для вызова соответствующих частей программы. Кроме того, объявление объекта TNotebook нужно дополнить строкой:

type
TNotebook = object (TApplication)
…….
Procedure InitMenuBar; Virtual; {Перекрываем стандартный метод InitMenuBar}
end;

В которой перекрывается прежний метод InitMenuBar, ответственный за формирование строки меню. И, наконец, в разделе объявлений программы следует поместить описание метода InitMenuBar и видоизменить описание метода InitStatusLine:

Procedure TNotebook.Ini tMenuBar;
{Создание верхнего меню}
var
R: TRect;
begin
GetExtent (R);
R.B.Y: = succ(R.A.Y); {R – координаты, строки меню}
MenuBar: = New (PMenuBar, Init(R, NewMenu ({Создаем меню}
{Первый элемент нового меню представляет собой подменю (меню второго уровня).
Создаем его} NewSubMenu('~F~/ Файл', hcNoContext,
{Описываем элемент главного меню}
NewMenu ({Создаем подменю}
NewItem({Первый элемент}
'~1~/ Открыть ', 'F3', kbF3,cmOpen, hcNoContext,
NewItem({Второй элемент}
'~2~/ Закрыть ', 'F2', kbF2, cmSave,hcNoContext,
NewItem({Третий элемент}
'~3~/ Сменить диск', ' ', 0, cmChangeDir,hcNoContext,
NewLine ({Строка-разделитель}
NewItem('~4~/ Вызов ДОС', ' ', 0, cmDOSShell,
hcNoContext,
NewItem('~5~/ Конец работы', 'ALT + X',
kbALTX, cmQuit, hcNoContext,
NIL)))))) {Нет других элементов подменю}),
{Создаем второй элемент главного меню}
NewItem('~W~/ Работа', ' ', kbF4, cmWork, hcNoContext,
NIL) {Нет других элементов главного меню}))))
end; {TNotebook. InitMenuBar}
{---------}
Procedure TNotebook. InitStatusLine;
{Формирует строку статуса}
var
R: TRect; {Границы строки статуса}
begin
GetExtent (R,); {Получаем в R координаты всего экрана}
R.A.Y: = pred(R.B.Y); StatusLine: = New(PStatusLine,
Init(R, {Создаем строку статуса}
NewStatusDef (О, $FFFF, {Устанавливаем максимальный диапазон контекстной справочной службы}
NewStatusKey('~ALT + X~ Выход', kbALTX, cmQuit,
NewStatusKey('~F2~ Закрыть', kbF2, cmSave,
NewStatusKey('~F3~ Открыть', kbF3,cmOpen,
NewStatusKey('~F4~ Работа', kbF4,cmWork,
NewStatusKey('~F10~ Меню', kbF10,cmMenu, NUL))))),{Нет других клавиш}
NUL){Нет других определений}
));
DisableCommands(WinComl) {Запрещаем недоступные команды}
end; {TNotebook.InitStatusLine}

В новом варианте программы мы продвинулись дальше по пути конкретизации ее действий. Если Вы запустите программу и нажмете клавиши ALT + F (вызов опции "Файл" главного меню), на экране появится изображение, показанное на рис. 15.2.

Иллюстрированный самоучитель по Turbo Pascal › Введение в Turbo Vision › Формирование меню
Рис. 15.2. Вид окна с развернутым меню опции Файл

Определение опций меню во многом напоминает определение командных клавиш в строке статуса. Отличие заключается лишь в том, что с любой опцией меню может быть при необходимости связана встроенная справочная служба. В нашей программе мы не используем эту возможность, для чего задаем стандартный идентификатор hcNoContext (нет контекстно-зависимой справки) при описании каждой опции.

Подобно клавишам строки статуса командные клавиши меню выделяются символом "~". Заметим, что не имеет смысла назначать в качестве командных клавиш клавиши кириллицы, так как при их анализе Turbo Vision игнорирует коды 128…255. Если бы, например, мы задали в качестве командной клавиши для опции "Файл" клавишу "Ф", нажатие ALT + Ф не вызвало бы развертывания подменю, связанного с этой опцией (как и в Турбо Паскале, в Turbo Vision опции главного меню вызываются комбинацией ALT + <клавиша>, а опции меню нижнего уровня – просто нажатием нужной командной клавиши).

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.