Отмена действия

  • Автор темы -
  • Дата начала

Гость
#1
Не могу сделать элементарную вещь!
1. Жмем по закрытию окна.
2. Всплывает окно:
- Сохранить, Не сохранять и Отмена.

Вопрос: Как правильно прописать кнопку «Отмена».
 
E

etc

Гость
#2
Что значит - "правильно"? вас что интересует?
 

Гость
#3
Вот есть форма.
Вот жмем на крестик или Alt+F4 и откр. другая модал. форма.
На ней три кнопки: да, нет, отмена.
Вопрос: Какой код нужно прописать кнопке отмена, что бы первая форма не закрылась, ведь она основная. Просто прикол в том, что вторая форма сплывает при событии OnClose, тойсь все, что бы я не делал, при окончании того действия, все ровно закроется первая форма!
-----------------------------
Можно же конечно переписать всю прогу, что бы та форма, которая мне нужна, была второй, тогда все будет пучком, но в этом случае тяжело это сделать...
 
E

etc

Гость
#4
RКакаято абракадабра.
Т.е. вы закрываете окно, и сразу открываете другое, но при чем тут какаято кнопка на другой, если уже первая закрыта???
короче ниче не понятно, вы расскажите че вам надо, только не про формы а про смысл.
 

Гость
#5
Откройте ворд, напишите там че-то и попробуйте закрыть программу! Всплывает вопрос, хотите сохранить или нет? А есть еще кнопка отменить (тойсь отменить закрытие). Вот я и хочу узнать как отменить закрытие проги! :)
 
E

etc

Гость
#6
В ворде при "всплытии" того окна, сам ворд не закрываеться, чувствуете разницу?
Вариантов сделать такое масса, один из - OnCloseQuery, но с ним надо быть осторожней.
 
Y

Yason

Гость
#7
Сантехник, вот код для билдера, в дельфи переводится почти дословно :)
Код:
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
switch (MessageDlg("Save?", mtConfirmation, mbYesNoCancel, 0)) {
case mrYes:
ShowMessage("Saved");
CanClose = true;
break;
case mrNo:
CanClose = true;
break;
case mrCancel:
CanClose = false;
break;
default:
ShowMessage("WTF?!");
}
}
 
E

etc

Гость
#8
Yason Что будет если прога бует закрываться вместе с системой, т.е. шотдаун сделали?
 
Y

Yason

Гость
#9
etc, действительно, появится неприятное окошко, которое будет мешать системе выгружаться; в конце концов система или выдаст предложение прибить программу, или сделает это автоматически.
Напомню, однако, что в исходном вопросе про обработку подобных случаев не спрашивалось :)
1. Жмем по закрытию окна.
2. Всплывает окно:
- Сохранить, Не сохранять и Отмена.
 
E

etc

Гость
#10
Yason
Ну это не то чтобы ошибка, просто как я уже и подчеркивал в Сообщение #6, надо такие моменты помнить и делать соотв. действия (если надо).
 
G

gromoseka

Гость
#12
А может просто проверить все необходимое при закрытии окна?
Например, что-то типа
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{
if (MessageDlg("Close application ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo,0) == mrYes)
Action = caFree;
else
Action = caMinimize;
}
(пример из билдера)
 

Гость
#13
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
if (MessageDlg("Close application ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo,0) == mrYes)
Action = caFree;
else
Action = caMinimize;
}
Это пример лучше, потому, что если CanClose будет равно false, то система вообще не завершит свою работу... А если использовать Action, то она ее насильно завершит в случае завершения... Вот только нужно не Action = caMinimize;, а Action = caNone; :)