Четвертый BORLAND С++ и его окружение

       

Выполнение диалогового блока


Выполнение диалогового блока аналогично созданию и выводу

диалогового окна, однако некоторые шаги здесь можно сократить,

так как диалоговые блоки выводятся на короткое время. Это зависит

также от того, является диалоговый блок режимным или безрежимным.

Большинство диалоговых блоков режимные. При выводе такого

диалогового блока пользователь не может использовать родительское

окно, пока не закроет этот диалоговый блок. Таким образом, режимный диалоговый блок "замораживает" операции в остальной части

приложения.

Для режимного выполнения диалогового блока используйте TDialog::Execute. При закрытии диалогового блока Execute возвращает

целое значение, указывающее на характер закрытия (идентификатор

"нажатого" управляющего элемента, например, IDOK). Если диалоговый блок распределялся динамически, не забудьте удалить объект.

При открытии безрежимного диалогового блока вы можете продолжать использование в приложении других окон. Такой блок можно

использовать, чтобы пользователь мог продолжать выполнять другие



действия, находить информацию и т.д.

Для безрежимного выполнения диалогового блока используйте

TDialog::Create. При этом с помощью флага WS_VISIBLE или функции

ShowWindow нужно явно задать видимость диалогового блока. Закрыть

диалоговый блок и удалить объект можно с помощью TDialog::CmOk и

TDialog::CmCancel.

Альтернативно вы можете создать свой объект диалогового блока в конструкторе родительского объекта диалогового блока. Таким

образом диалоговый блок создается только один раз, а любые изменения, вносимые в его состояние (такие как расположение, активность и т.д.) сохраняются при следующем открытии диалогового блока. Как и любые другие дочерние окна, объект диалогового окна автоматически удаляется при уничтожении родительского объекта, и

явное его удаление не требуется.

Можно также использовать автоматическое создание. При этом

ObjectWindows автоматически создает за вас дочерние диалоговые

объекты. Создав эти объекты в конструкторе производного от TWindow класса (спецификацией в качестве родительского объекта this),


производный от TWindow класс строит список дочерних окон. Это

происходит также когда объект диалогового блока является

элементом данных родительского класса. При создании производного

от TWindow класса он пытается создать все дочерние объекты в

списке с включенным флагом wfAutoCreate. В результате дочерние

объекты выводятся на экране одновременно с родительским окном.

Включить флаг wfAutoCreate можно с помощью функции EnableAutoCreate, а выключить - с помощью DisableAutoCreate. Для автоматического создание дочерних объектов TWindow использует Create.

При использовании автоматического создания нужно обеспечить видимость диалогового блока с помощью флага WS_VISIBLE. Для разрешения автоматического создания можно использовать ShowWindow.

Диалоговые блоки отличаются от других дочерних окон тем, что

в процессе существования родительского окна они могут выводиться

и уничтожаться многократно, но редко выводятся и уничтожаются одновременно с родительским окном. Обычно приложение выводит диалоговый блок в ответ на выбор в меню, щелчок "мышью", условие ошибки или другое событие. Таким образом, вы должны быть уверены, что

новые объекты диалоговых окон не строятся без удаления предыдущих.

Считать данные из диалогового блока можно в любое время, пока существует объект диалогового блока. Чаще всего это делается в

функции CmOK диалогового блока, которая вызывается по кнопке OK.

Аналогично оконным объектам, функции-элементы Create и Execute диалогового блока могут порождать исключительную ситуацию

TXWindow. Такая ситуация обычно возникает при невозможности создания диалогового окна. Можно также использовать глобальный обработчик особых ситуаций, который ObjectWindows инсталлирует при

запуске приложения, или установить свой собственный. Чтобы задать

собственный разработчик, заключите защищаемый код в блок

try/catch.


Содержание раздела