Mi sono accorto che anche il metodo Close richiama la FormCloseQuery

Quindi la soluzione più idonea dovrebbe essere questa:

codice:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Close;
end;


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose:=False;
  if MessageDlg('Si vuole davvero chiudere l''applicazione?',mtConfirmation,
    [mbYes, mbNo], 0) = mrYes then
  begin
    if MessageDlg('Confermi?', mtInformation,[mbYes, mbNo], 0) = mrYes then
      CanClose:=True;
  end;
end;
Giusto Alka?