Reputation:
When my form is closed by clicking on 'Cross Button' or Alt + F4, I want user to ask whether he wants to close the application or not. If yes, I will terminate the application otherwise nothing to do. I am using following code on the onclose event of the form
procedure MyForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
buttonSelected : integer;
begin
buttonSelected := MessageDlg('Do you really want to close the application?',mtCustom, [mbYes,mbNo], 0);
if buttonSelected = mrYES then
begin
Application.Terminate;
end
else
begin
//What should I write here to resume the application
end;
end;
Whether I click Yes or No, my application is terminating. What should I do so that on No click of confirmation box, my application should not terminate. How should I improve my above function? Am I using right form event to implement this functionality? Please help..
Upvotes: 3
Views: 8121
Reputation: 1841
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
buttonSelected: integer;
begin
buttonSelected := MessageDlg('Do you really want to close the application?', mtCustom, [mbYes, mbNo], 0);
if buttonSelected = mrYES then
begin
CanClose:=true;
end
else
begin
CanClose:=false;
end;
end;
or as @TLama advised, to simplify:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := MessageDlg('Do you really want to close the application?', mtCustom, [mbYes, mbNo], 0) = mrYES;
end;
Upvotes: 9
Reputation: 5684
The Window will stay open if you type
Action := caNone;
in your else Part
Upvotes: 9