Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > OnClose


Автор: Dmi3ev 4.5.2009, 14:56
в OnClose формы пишу:
Код

if (MessageBox(NULL,"Выйти?", "Сообщение", MB_YESNO)==ID_NO)
//не выходить;

как сделать так чтобы не выходить?

Автор: mrbrooks 4.5.2009, 15:05
В событие OnClose есть параметр Action.
Код

Action = caNone; //окно не закроется

Action = caFree; //окно закроется - по умолчанию.


Так же для этих целей можно использовать событие OnCloseQuery и его параметр CanClose

Автор: Dmi3ev 4.5.2009, 15:24
Спасибо  smile 
Видел параметр Action, но не знал как юзать.
Вот конечный результат:
Код

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (MessageBox(NULL,"Выйти?", "Сообщение", MB_YESNO)==ID_NO)
        Action = caNone;
}

Автор: THandle 4.5.2009, 21:57
А я бы использовал событие OnCloseQuery. Оно выполняется до OnClose. У него есть параметр CanClose. ИМХО, OnClose лучше оставлять для конечных "брутальных" действий. Сорри, Билдера нет, но вот примерчик на Delphi:
Код


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ShowMessage('Сообщение будет показано только если будем реально выходить. Точнее если видите его, то уже вышли =)');
end;

procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if MessageBox(0, 'Выйти?', 'Сообщение', MB_YESNO) = ID_NO then
    CanClose := false;
end;

Автор: Dmi3ev 5.5.2009, 15:01
Цитата

А я бы использовал событие OnCloseQuery.

THandle, ок, учту  smile 
Цитата

Сорри, Билдера нет, но вот примерчик на Delphi:

Ничего страшного, смогу провести столь трудную аналогию  smile 
Ща поменяю, раз так правильнее будет...  smile 
Я просто не программер и особой разницы не вижу, поэтому THandle надеюсь на Вас  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)