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

Меню

Стандартная программа содержит поле MenuBar типа ТMenuВаr. По умолчанию Метод TApplicatlon.InitMenuBar устанавливает это поле в NIL, что означает отказ от меню. Если Вы хотите использовать меню в Вашей программе, необходимо перекрыть этот метод. В следующем примере создается двухуровневое меню, показанное на рис.23.1.

Иллюстрированный самоучитель по Turbo Pascal › Практика использования › Меню
Рис. 23.1. Двухуровневое меню

Опцию "Подменю…" можно выбрать следующими способами:

  • нажатием клавиш F10+<смещение указателя>+Enter;
  • командой ALT + S;
  • отметкой мышью.

Опции "Первый выбор" и "Второй выбор" можно выбрать клавишами F1 и F2 без развертывания подменю. После развертывания подменю можно использовать те же клавиши, а также использовать клавиши с цифрами 1 и 2, отметку мышью или смещение указателя к нужной опции и Enter. Опция "Третий выбор" доступна только после развертывания подменю. Выбор каждой из этих трех опций приводит к появлению на экране окна с сообщением. Кроме того, опция "Третий выбор" попеременно запрещает или разрешает действие команд cm1, cm2 и cmQuit.

{$X+}
Uses Objects,App,Menus,Drivers,Views,MsgBox;
type
MyApp = object (TApplication)
Procedure InitMenuBar; Virtual;
Procedure HandleEvent(var Event: TEvent); Virtual;
end;
const
cm1 = 201;
cm2 = 202;
cm3 = 203;
{----------------}
Procedure MyApp. InitMenuBar;
var
R: TRect;
begin
GetExtent (R);
R.B.Y: = succ(R.A.Y);
MenuBar: = New (PMenuBar, Init(R,
NewMenu ({Главная полоса меню}
NewSubMenu ({Первый элемент главного меню}
' ~S~ Подменю…', hcNoContext,
NewMenu ({Определить выпадающее подменю}
NewItem('~1~ Первый выбор ', ' F1 ', kbF1, cm1, 0,
NewItem('~2~ Второй выбор', ' F2 ', kbF2, cm2, 0,
NewLine({Определить разделяющую линию}
NewItem('~3~ Третий выбор', ' ', 0, cm3, 0,
NIL))))),
NewItem({Второй элемент главного меню}
'-ESO Выход', '~ESC~', kbEsc,cmQuit, 0, NIL))))); end {MyApp. InitMenuBar};
{------------------}
Procedure MyApp. HandleEvent;
const
Flag: Boolean = True;
cms = [cm1, cm2, cmQuit];
begin
Inherited HandleEvent (Event);
case Event. Command of
cm1: MessageBox (#3 'Первый выбор', NIL,0);
cm2: MessageBox (#3 'Второй выбор', NIL,0);
cm3:
begin
MessageBox (#3' Третий выбор', NIL,0);
if Flag then
DisableCommands (cms)
else
EnableCommands (cms);
Flag: = not Flag
end
end
end {MyApp.HandleEvent };
{------------------}
var
P: MyApp;
begin
P.Init;
P.Run;
P.Done
end.
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.