Диалоговое окно
Insert(New(PLabel, {Вставляем метку кнопок} Init(R,'~2~ Независимые кнопки',CB))); R.Assign(40.6.63.9); RB: = New(PRadioButtons, Init(R, NewSItem('Первое продолжение', NewSItem('Второе продолжение', NewSItem('Третье продолжение', NIL))))); Insert(RB); {Вставляем зависимые кнопки} R.Assign(36.5.63.6); Insert(New(PLabel, {Вставляем метку кнопок} Init(R,'~3~ Зависимые кнопки',RB))); R.Assign(14.11.32.13); Insert(New(PButton, {Вставляем кнопку "Установить"} Init(R,'~4~ Установить',cm1,bfNormal))); R.Assign(40.11.58.13); Insert (New(PButton, {Вставляем кнопку "Не изменять"} Init(R,'~5~ He изменять',cm2,bfNormal))); SetData(Data) {Устанавливаем начальные значения} end; {Помещаем окно на экран и получаем команду завершения} case DeskTop.ExecView(D) of cm1: begin {Была команда "Установить":} D.GetData(Data); {Получаем новые значения} with Data do begin {Готовим сообщение} s: = #3'Параметры диалогового окна:'+ #13'Текст:'+I_Data+#13'Кнопки: '; if CB_Data and 1 < > 0 then s: = s+' Первая'; if CB_Data and 2 < > 0 then s: = s+' Вторая'; if CB_Data and 4 < > 0 then s: = s+' Третья'; s: = s+#13'Продолжение: '+st[RB_Data] end end; cm2: s: = #3'Команда "Не изменять"'; else s: = ' '; end; {case} if s < > '' then MessageBox(s,NIL,0) end {MyApp.GetDialog}; {--------------} Procedure TMyDialog.HandleEvent; {Обрабатывает нестандартные команды cm1 и cm2} begin Inherited HandleEvent(Event); if Event.What = evCommand then case Event.Command of cm1:EndModal (cm1);{Завершить с командой cm1} cm2:EndModal (cm2){Завершить с командой cm2} end; ClearEvent (Event) {Очистить другие события} end {TMyDialog.HandleEvent}; {---------------} var P: MyApp; begin P.Init; P. Run; P. Done end.
Для использования нестандартных команд cm0, cm1 и cm2 перекрываются обработчики событий строки статуса и диалогового окна. Чтобы завершить диалог с выдачей нестандартной команды, в обработчике событий окна вызывается метод EndModal, в результате чего метод ExecView возвращает значение соответствующей команды. Заметим, что стандартная для Turbo Vision команда cmCancel (закрыть окно по клавише Esc) обрабатывается стандартным методом TDlalog.HandleEvent.