Система программирования 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.



Содержание раздела