Диалоговое окно
На рис. 23.2 показан вид диалогового окна, которое создается и используется в рассматриваемом ниже примере.
Рис. 23.2. Диалоговое окно со строкой ввода и кнопками
Если диалог завершен командой "Установить", на экране разворачивается окно, в котором сообщаются полученные из диалогового окна параметры – текст из строки ввода и настройка кнопок. Если диалог завершен командой "Не изменять", окно сообщений содержит строку:
Команда 'Не изменять',
Если диалог завершен по клавише Esc, на экран не выводится никаких сообщений.
Пример иллюстрирует использование строки ввода, зависимых и независимых кнопок и нестандартных команд.
Для задания начальных параметров и чтения параметров, установленных в результате диалога, используется поле TDialog.Data. Это поле содержит данные, используемые в ходе диалога, в виде записи, поля и тип которой строго соответствуют порядку и типу вставляемых в окно терминальных элементов. В нашем примере (см. текст программы) первым в окно вставляется статический текст, однако этот терминальный элемент не имеет параметров, которые можно было бы изменить в ходе диалога, поэтому в записи Data ему не отводится место. Второй по счету в окно вставляется строка ввода TInputLine.
Этот объект характеризуется длиной L строки, указываемой вторым параметром обращения к TInputLine.Init, поэтому для него в Data выделяется поле, длиной L+1 байт. Каждому кластеру с кнопками выделяется поле WORD, что дает возможность задать в кластере до 16 независимых кнопок и до 65536 зависимых: каждая независимая кнопка связана с соответствующим разрядом 16-битного поля (первая кнопка – с младшим разрядом), а каждой зависимой кнопке соответствует свое число (первой кнопке соответствует число 0, второй -1 и т.д.). Установка данных в поле TDialog.Data осуществляется методом TDialog.SetData, получить данные после диалога можно с помощью метода TDialog.GetData.
{$Х+} Uses Objects, App, Drivers, Dialogs,Menus,Views,MsgBox; type MyApp = object (TApplication) Procedure InitStatusLine; Virtual; Procedure HandleEvent (var Event: Tevent); Virtual; Procedure GetDialog; end; PMyDialog = TMyDialog; TMyDialog = object (TDialog) Procedure HandleEvent (var Event: Tevent); Virtual; end; const cm0 = 200; cm1 = 201; cm2 = 202; {-------------------} Procedure MyApp.InitStatusLine; {Создает строку статуса}