284______________________________________________Глава 4

Например, пусть в приложении имеется окно редактирования RichEditI, в ко-
тором свойство Modified указывает на то, был ли изменен пользователем текст в
этом окне с момента его последнего сохранения. Тогда обработчик события onClo-
seQuery может иметь вид:

void _fastcall TFormI::FormCloseQuery(TObject *Sender, bool &CanClose)
{

if (RichEditl->Modified)
(
int res = MessageDIg("Текст в окне был изменен. Сохранить его?",

mtConfirmation, TMsgDIgBu'ttons () « mbYes« mbNo « mbCancel,0);

switch (res)
{

case mrYes:    MSaveClick(Sender) ;

break;

case mrCancel: CanClose = false;

}
1
)

Если пользователь в диалоговом окне с запросом о сохранении ответит «Yes»,
то будет выполнена описанная в приложении процедура сохранения MSaveClick.
Если пользователь ответит «No», то никаких действий в структуре switch произво-
диться не будет. В обоих случаях после выхода из обработчика события значение
CanClose останется равным своему значению по умолчанию true, и процесс закры-
вания формы будет продолжен. Но если пользователь при запросе ответит «Cancel»
или нажмет клавишу Esc, то значение CanClose станет равно false и окно не закро-
ется. Этот обработчик сработает при любой попытке пользователя закрыть прило-
жение: нажатии в нем кнопки или раздела меню Выход, нажатии кнопки систем-
ного меню в полосе заголовка окна и т.п.

Если обработчик события onCIoseQuery отсутствует или если в его обработчи-
ке сохранено значение true параметра CanClose, то следом наступает событие ОпС-
lose. В обработчик этого события передается по ссылке переменная Action, кото-
рой можно задавать значения:

caNone    He закрывать форму. Это оставляет возможность и в обработчике
данного события отказаться от закрытия формы

caHide    При этом значении (оно принято по умолчанию для форм, не явля-
ющихся главными и дочерними в приложениях MDI) закрыть фор-
му будет означать сделать ее невидимой. Для пользователя она ис-
чезнет с экрана, однако вся хранящаяся в форме информация со-
хранится. Она может использоваться другими формами или той же
самой формой, если она снова будет сделана видимой

caMinimize При этом значении закрыть форму будет означать свернуть ее до

пиктограммы. Как и в предыдущем случае, вся информация в фор-
ме будет сохранена

caFree    При этом значении закрыть форму будет означать уничтожение

формы и освобождение занимаемой ею памяти. Вся информация, со-
держащаяся в форме, будет уничтожена. Если эта форма в дальней-
шем потребуется еще раз, ее надо будет создавать методом Create-
Form

Не все значения Action допустимы для любых форм. Например, для дочерних
форм в приложении MDI возможны значения только caNone и caMinimize.

Если в обработчике события OnClose задано значение Action, равное caFree,
то при освобождении памяти возникает еще одно последнее событие — OnDestroy.
Оно обычно используется для очистки памяти от тех объектов, которые автомати-