Пример диалогового окна
with D do
begin
R.Assign(1,1,69,3);
Insert(New(PStaticText, {Вставляем статический текст}
Init(R,#3'Это статический текст')));
R.Assign(20,3,60,4) ;
I := New(PInputLine, Init(R, L));
Insert (I); {Вставляем строку ввода}
R.Assign(1,3,20,4);
Insert(New(PLabel, {Вставляем метку строки ввода}
Init(R,'~l~ Строка ввода:',I)));
R.Assign(60,3,62,4);
Insert(New(PHistory, {Вставляем список ввода}
Init(R,I,0))) ;
R.Assign(10,6,30,9) ;
CB := New (PCheckBoxes, Init(R,
NewSItem('Первая кнопка',
NewSItem('Вторая кнопка',
NewSItem('Третья кнопка', NIL)))));
Insert(CB); {Вставляем независимые кнопки}
R.Assign(6,5,30,6);
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.