Как указать на необходимость выполнения команды? Для этого в Turbo Vision Вы просто создаете событие-команду (evCommand), в поле Command которой помещаете код нужной команды. Например:
const
cmMyCommand =100;
.....
{Ниже показан фрагмент обработчика событий:}
Event.What := evCommand; {Определяем событие-команду}
Event.Command := cmMyCommand; {Указываем код команды}
Event.InfoPtr := NIL; {Признак активного события}
PutEvent(Event); {Создаем событие}
В этом фрагменте событие-команда создается обращением к методу PutEvent. Заметим, что поле Event.InfoPtr должно содержать NIL, если событие активно; если событие уже обработано, для его очистки используется стандартный метод ClearEvent, который помещает в поле What признак evNothing, а в поле InfoPtr - указатель @Self (указатель на таблицу виртуальных методов объекта). Подробнее об использовании поля Event.InfoPtr см.п.18.7.
Вновь созданное событие вернется модальному элементу, который должен знать, как его обрабатывать. Например, часто событие-команда создается обработчиком событий строки статуса как реакция на нажатие предусмотренной в этой строке командной клавиши или отметку мышью соответствующего поля. В этом случае обработчик событий программы может иметь такой вид:
Procedure MyProgram.HandleEvent(var Event);
.....
begin
Inherited HandleEvent(Event);
case Event.What of
evCommand:
begin {Обработать команды:}
case Event.Command of
cmMyCommand: MyProcedure; {Выполнить действия, связанные с командой cmMyCommand}
.....
else
exit {He обрабатывать непредусмотренные команды}
end; {case}
ClearEvent(Event) {Очистить событие}
end;
.....
end;
Часто модальным элементом является диалоговое окно с несколькими кнопками. Если Вам необходимо связать с кнопками свои команды и получить выбранную в диалоге команду, Вы можете закрыть окно с помощью вызова EndModal, передав этому методу в качестве параметра код команды.
В следующем примере создается диалоговое окно с двумя кнопками. При нажатии кнопки «Команда cmPrint» окно закроется и на экран будет выведена строка