user1556433
user1556433

Reputation:

How to use MessageDlg in OnClose Event of Delphi Form?

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

Answers (2)

AvgustinTomsic
AvgustinTomsic

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

Obl Tobl
Obl Tobl

Reputation: 5684

The Window will stay open if you type

Action := caNone;

in your else Part

Upvotes: 9

Related Questions