procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MessageDlg ('Are you sure you want to exit?', mtConfirmation,
[mbYes, mbNo], 0) = idNo then
CanClose := False;
end;
Если событие OnCloseQuery указывает на то, что форма может быть закрыта, происходит
инициализация события OnClose. Третий шаг — обращение к событию OnDestroy, которое
является антиподом события OnCreate и в большинстве случаев используется для освобождения
памяти, занимаемой объектами, связанными с формой.
Зачем нужно промежуточное событие OnClose? В этом методе вы получаете еще один шанс
предотвратить закрытие приложения, кроме того, вы можете указать альтернативный набор
действий, связанных с закрытием. Метод обладает параметром Action, который передается ему
по ссылке. Этому параметру можно присвоить одно из следующих значений.
caNone — закрывать форму запрещается. Это соответствует состоянию, когда параметр CanClose
метода OnCloseQuery равен значению False.
caHide — форма не закрывается, а только скрывается. Данное значение имеет смысл только в случае,
если в составе приложения присутствуют другие фор мы, в противном случае программа завершает работу.
Данное значение является значением по умолчанию для вторичных форм, и именно по этой причине в предыдущих
примерах я должен был обрабатывать событие OnClose для того, чтобы действительно закрывать вторичные формы.
caFree — форма закрывается, занимаемая ей память освобождается, и если это была главная форма приложения,
приложение завершает работу. Это значение является значением по умолчанию для главной формы приложения.
Данное действие следует выполнять также в случае, если вы динамически создаете несколько форм
(в случае если при закрытии формы вы хотите удалить объект Windows и уничтожить соответствующий объект Delphi).
caMinimize — форма не закрывается, а только минимизируется. Это значение является значением по умолчанию для дочерних
форм приложения MDI.