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

Команды. Преобразование активных событий в команды. Запрещение и разрешение команд.

В следующем примере создается диалоговое окно с двумя кнопками. При нажатии кнопки "Команда cmPrint" окно закроется и на экран будет выведена строка:

Действие команды cmPrint

Если нажать кнопку "Выход" или закрыть окно клавишей Esc, эта строка не появится.

Uses CRT,App,Dialogs,Objects,Drivers,Views;
type
PProg = TProg;
TProg = object (TApplication)
Constructor Init;
end;
PDial = TDial;
TDial = object (TDialog)
Procedure HandleEvent(var Event: TEvent); Virtual;
end;
const
cmPrint = 100; Constructor TProg.Init;
var
R: TRect;
Dia: PDial;
begin
Inherited Init;
R.Assign(20.9.60.17);
Dia: = New(PDial, Init(R,''));
R.Assign(3.4.22.6);
DiaA.Insert(New(PButton,
Init(R,'Команда cm~P~rint',cmPrint,bfDefault)));
R.Assign(23.4.35.6);
DiaA.Insert(New(PButton,Init(R,'Выход',cmCancel,bfNormal)));
if ExecView(Dia) = cmPrint then
begin
{Вывод сообщения "в лоб", с помощью стандартных средств Турбо Паскаля.
В TurboVision есть более удобные способы вывода сообщений}
GotoXY(30.12);
TextColor(Black);
TextBackground(White);
Write (' Действие команды cmPrint ')
end
end; {TProg.Init}
Procedure TDial.HandleEvent(var Event: TEvent);
begin
Inherited HandleEvent(Event);
if (Event.What = evCommand) and
(Event.Command = cmPrint) then EndModal(cmPrint)
end; {TDial.HandleEvent)
var
Prog: TProg;
begin
Prog.Init;
Prog.Run;
Prog.Done
end.

В обработчике событий диалогового окна TDial.HandleEvent вначале вызывается стандартный обработчик TDialog.HandleEvent. Это дает возможность кнопке "Команда cmPrint" преобразовать событие, связанное с ее выбором, в команду cmPrint. Вновь созданное событие возвращается обработчику TDialHandleEvent, т.к. именно он является обработчиком событий модального элемента. Возвращаемая модальным элементом команда служит значением стандартной функции ExecView.

Для упрощения программы вывод сообщения реализуется стандартными средствами Турбо Паскаля. В Turbo Vision имеется процедура MessageBox, обеспечивающая более удобный вывод сообщений.

Запрещение и разрешение команд

В качестве значения константы-команды можно использовать любое число в диапазоне от 0 до 65535, однако следует учесть, что диапазоны 0…99 и 256…999 Turbo Vision резервирует для стандартных команд и их не следует использовать для определения команд пользователя. Два диапазона зарезервированных команд выбраны потому, что команды с кодами 0…255 можно временно запретить, в то время как остальные команды запретить невозможно.

Для запрещения или разрешения команд используется глобальный тип TCommandSet, представляющий собой множество чисел в диапазоне 0…256 (мощность множеств в Турбо Паскале не может превышать 256, вот почему запретить можно только первые 256 команд). Команды запрещаются обращением к методу DisableCommands, а разрешаются обращением к EnableCommands. Диалоговые элементы, связанные с запрещенными командами, выделяются оттенком и их нельзя выбрать мышью или командными клавишами. Например, если в конструкторе TProgJnit (см. предыдущий пример) перед оператором:

if ExecView(Dia) = cmPrint then

Вставить оператор:

DisableCommand([cmPrint]);

Кнопка "Команда cmPrint" будет выведена цветом фона окна и станет недоступна для диалога.

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