![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
В моей программе есть меню, в котором есть пункт выход, по нажатию на который программа выдает запрос "Сохранить файл?" и кнопки да, нет, отмена. Так вот, эта кнопка привязана также к событию закрытия формы Form Close.
Код:
procedure TfrmGL.FormClose(Sender: TObject; var Action: TCloseAction); begin N6Click(nil); end; |
|
#2
|
|||
|
|||
|
потому что надот делать по другому.
по нажатию кнопки выход надо сделать только close; А вот в OncloseQuery надо сделать что-то типа: Код:
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := MessageDlg('Are you sure to close the program?',
mtConfirmation,[mbYes,mbNo],0) = mrYes;
end; |
|
#3
|
||||
|
||||
|
Работает) Но потом пишет ошибку EStackOverflow with message 'Stack Overflow'.
Код следующий: Код:
procedure TfrmGL.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
Res: Integer;
begin
if not Saved then
begin
Res:=Application.MessageBox('Сохранить изменения ?', 'Предупреждение',
MB_YESNOCANCEL);
if Res=IDYes then
begin
N13Click(nil);
Saved:=True;
CanClose:=True;
Application.Terminate;
end
else if Res=IDNo then
begin
CanClose:=True;
Application.Terminate;
end
else if Res=IDCancel then
begin
CanClose:=False;
Exit;
end
end;
end;Код:
procedure TfrmGL.FormClose(Sender: TObject; var Action: TCloseAction); begin Close; end; |
|
#4
|
||||
|
||||
|
Код:
procedure TfrmGL.FormClose(Sender: TObject; var Action: TCloseAction); begin Close; end; Также в предыдущем куске лишним является Application.Terminate . Программа итак закрывается, зачем несколько раз ей говорить закрыться? |
|
#5
|
||||
|
||||
|
Понял. А как надо сделать? Application.Terminate убрал, теперь по нажатию "Отмена" работает. Когда нажимаю "Нет" ничего не происходит и окно опять вылетет диалоговое.
|
|
#6
|
||||
|
||||
|
Код:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not Saved then
case Application.MessageBox('Сохранить изменения ?', 'Предупреждение', MB_YESNOCANCEL) of
IDYes:
begin
{<Сохранить>}
Saved:=True;
CanClose:=True;
end;
IDNo: CanClose:=True;
IDCancel: CanClose:=False;
end;
end; |