Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Отмена действия


Автор: Sergey89 18.9.2004, 13:54
Я сделал так, чтобы при закрытии окна вызывалась функция MessageDlg,
как сделать так, чтобы при нажатии на кнопку Cancel форма не закрылась?

Автор: Alex 18.9.2004, 14:01
Код
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Query1.CachedUpdates
then
 case Application.MessageBox(
              'Сохранить изменения в базе данных?',
              'Подтвердите сохранение изменений',
              MB_YESNOCANCEL+MB_ICONQUESTION) of

   IDYES:    ...
   IDCANCEL: CanClose:=false;
   IDNO:     ...
 end;

end;

Автор: Underdark 18.9.2004, 14:06
MessagDlg - энто функция, которая возвращает код нажатой клавиши (например для Cancel она вернёт 2).
То бишь, делаешь что-то типа так:
Код
if MessagDlg(..........)=2 then Exit{или что-то подобное - зависит от конкретной ситуации}
else Form1.close{например};


А вообще, если хочешь ответа по существу, то и спрашивай поконкретней и желательно код привести smile.gif

Автор: Sergey89 18.9.2004, 14:13
Цитата
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
s: integer;
begin
if Label6.Caption= '0' then
begin
end
else
begin
s:=MessageDlg('Òåêñò â äîêóìåíòå áûë èçìåí¸í.'+ #13+ 'Âû õîòèòå ñîõðàíèòü èçìåíåíèÿ?', mtWarning, [mbYes, mbNo, mbCancel], 0);
if s= mrYes then
begin
SaveDialog1.Execute;
end;
if s= mrNo then
begin
end;
if s= mrCancel then
{---Íå çíàþ---}
end;
end;

Вот код

Автор: Ripper 18.9.2004, 20:32
if s= mrCancel then Form1.CanClose:=false; ?

Автор: Sergey89 19.9.2004, 10:43
Не такого свойства у формы CanClose

Автор: Ripper 19.9.2004, 10:57
Ой)
alex-co тебе правильно написал. Используй formclosequery:
Код

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
s: integer;
begin
if Label6.Caption= '0' then
begin
end
else
begin
s:=MessageDlg('Òåêñò â äîêóìåíòå áûë èçìåí¸í.'+ #13+ 'Âû õîòèòå ñîõðàíèòü èçìåíåíèÿ?', mtWarning, [mbYes, mbNo, mbCancel], 0);
if s= mrYes then
begin
SaveDialog1.Execute;
end;
if s= mrNo then
begin
end;
if s= mrCancel then
CanClose:=false;
end;
end;

у меня работает. Да кстати если label6.caption = '0 ' и прога ничего не должна делать используй exit smile.gif и вообще пример alex-co идеален..
Код

s:=MessageDlg('Oaeno a aieoiaioa aue eciai?i.'+ #13+ 'Au oioeoa nio?aieou eciaiaiey?', mtWarning, [mbYes, mbNo, mbCancel], 0);
case s of
mrCancel:CanClose:=false;
end;

Воть) используй CASE

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