Проектирование графического интерфейса пользователя______________283

Обратите внимание на событие OnCreate. Обработка этого события широко ис-
пользуется для настройки каких-то компонентов формы, создания списков и т.д.
Это событие для каждой формы происходит только один раз. Все остальные собы-
тия могут в процессе выполнения приложения неоднократно повторяться.

В нужный момент форму можно сделать видимой методами Show или Show-
Modal. Последний метод открывает форму как модальную. Это означает, что
управление передается этой форме и пользователь не может передать фокус другой
форме данного приложения до тех пор, пока он не закроет модальную форму. Бо-
лее подробное описание модальных форм и примеры работы с ними будут рассмот-
рены позднее в разделе 4.7.3.

Методы Show и ShowModal можно применять только к невидимой в данный
момент формы. Если нет уверенности, что форма в данный момент видима, то
прежде, чем применять эти методы, следует проверить свойство Visible формы.
При выполнении методов Show или ShowModal возникает событие формы onS-
how. Это событие возникает до того момента, как форма действительно станет ви-
димой. Поэтому обработку события onShow можно использовать для настройки
каких-то компонентов открываемой формы. Отличие от упомянутой ранее на-
стройки компонентов в момент события onCreate заключается в том, что событие
onCreate наступает для каждой формы только один раз в момент ее создания, а со-
бытия onShow наступают каждый раз, когда форма делается видимой. Так что при
этом в настройке можно использовать какую-то оперативную информацию, возни-
;   кающую в процессе выполнения приложения.

Методом Hide форму в любой момент можно сделать невидимой. В этот мо-
мент в ней возникает событие onHide.

Необходимо напомнить, что для выполнения методов CreateForm, Show,
ShowModal, Hide и вообще для обмена любой информацией между формами моду-
ли соответствующих форм должны видеть друг друга, а для этого в них надо вклю-
чать описанные выше директивы препроцессора #include. Например, если форма в
модуле Uniti должна управлять формой в модуле Unit2, то в модуль Uniti должна
быть включена инструкция

^include "Unit2.h"

А если к тому же форма в модуле Unit2 должна пользоваться какой-то инфор-
мацией, содержащейся в модуле Uniti, то в модуль Unit2 должна быть включена

инструкция

ftinclude "Uniti.h"

Закрыть форму можно методом Close(). При этом в закрывающейся форме воз-
никает последовательность событий, которые можно обрабатывать. Их назначе-
ние — проверить возможность закрытия формы и указать, что именно подразуме-
вается под закрытием формы. Проверка возможности закрытия формы необходи-
ма, например, для того, чтобы проанализировать, сохранил ли пользователь доку-
мент, с которым он работал в данной форме и который изменял. Если не сохранил,

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

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

,   или вообще отменить закрытие.

Рассмотрим последовательность событий, возникающих при выполнении ме-

i   тода Close.

Первым возникает событие onCloseQuery. В его обработчик передается по
ссылке булева переменная CanClose, определяющая, должно ли продолжаться за-
крытие формы. По умолчанию CanClose равно true, что означает продолжение за-
крытия. Но если из анализа текущего состояния приложения или из ответа поль-
зователя на запрос о закрытии формы следует, что закрывать ее не надо, парамет-
ру CanClose должно быть присвоено значение false. Тогда последующих событий,
связанных с закрытием формы не будет.