Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di ganesha
    Registrato dal
    Jan 2003
    Messaggi
    357

    [DELPHI] Chiedere conferma di chiusura applicazione

    Se metto un TButton so come si fa:
    codice:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if MessageDlg('Si vuole davvero chiudere l''applicazione?',mtConfirmation,
        [mbYes, mbNo], 0) = mrYes then
      begin
        if MessageDlg('Confermi?', mtInformation,[mbYes, mbNo], 0) = mrYes then Close;
      end;
    end;
    non so, invece, come si fa nel caso si prema il pulsante di chiusura situato sulla barra dell'intestazione.

    In quel caso quale funzione (o procedura) viene invocata?

  2. #2
    Utente di HTML.it L'avatar di ganesha
    Registrato dal
    Jan 2003
    Messaggi
    357
    Non so com'è ma riesco a trovare la soluzione solo dopo aver postato il problema in questo forum...

    Si fa così (o almeno questo è un modo):
    codice:
    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;

  3. #3
    Utente di HTML.it L'avatar di ganesha
    Registrato dal
    Jan 2003
    Messaggi
    357
    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?

  4. #4
    si è corretto.

    se proprio vuoi, al posto di
    codice:
        if MessageDlg('Confermi?', mtInformation,[mbYes, mbNo], 0) = mrYes then
          CanClose:=True;
    puoi fare:
    codice:
        CanClose := MessageDlg('Confermi?', mtInformation,[mbYes, mbNo], 0) = mrYes;

    ma la sostanza non cambia.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466
    Originariamente inviato da ganesha
    Non so com'è ma riesco a trovare la soluzione solo dopo aver postato il problema in questo forum...
    Succedeva anche ad un altro utente... il problema è facilmente individuabile: si cercano le soluzioni solo dopo aver postato.

    Confermo comunque la soluzione che hai trovato, anche se io in genere uso Application.MessageBox in quanto la funzione da te utilizzata si basa su una lingua predeterminata (inglese) e non dipendente dal sistema, a meno che questo comportamento non sia ciò che cerchi.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di ganesha
    Registrato dal
    Jan 2003
    Messaggi
    357
    Originariamente inviato da alka
    Succedeva anche ad un altro utente... il problema è facilmente individuabile: si cercano le soluzioni solo dopo aver postato.
    non è proprio così... spesso cerco per diversi giorni senza trovare una soluzione.
    Poi il cercare di esporre in modo comprensibile il problema probabilmente mi riordina anche le idee e in qualche modo viene fuori la soluzione.

    Grazie per le varianti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.