Domanda

messagebox (gestire, '? Non si vuole veramente uscire', 'Sei sicuro?', 1);

In questo tasto ci sono due cose, ciò che l'utente può fare. OK e Annulla. quale codice devo scrivere, che il pulsante chiude il programma in "ok" e termina la finestra di dialogo, quando si preme cancellare?

È stato utile?

Soluzione

Delphi fornisce soluzioni migliori per mostrare un messagebox. Dovrei usare la funzione MessageDlg. Il valore di ritorno della funzione MessageDlg (e MessageBox) indica la scelta degli utenti. Così, quando si inserisce un pulsante Sì sul MessageDlg, il valore di ritorno sarà mrYes quando l'utente preme il pulsante Sì. Così il vostro codice sarebbe simile a questo:

var
  ShouldClose: Boolean;
begin
  if MessageDlg('Do you really want to quit?', mtConfirmation, 
      [mbYes, mbNo], 0) = mrYes then
    ShouldClose := True
  else
    ShouldClose := False;
end;

Si vuole anche chiudere l'applicazione se gli utenti sceglie Sì. Quando si ha una normale applicazione VCL di Delphi è possibile implementare l'evento CloseQuery di voi MainForm, l'evento CloseQuery viene eseguito quando si tenta di chiudere la vostra mainform (come cliccando sul closebutton) e ha un CanClose variabile. Impostazione CanClose True significa che la MainForm è OK per chiudere, impostandola su false impedirà il tuo mainform dalla chiusura:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageDlg('Do you really want to quit?', mtConfirmation, 
    [mbYes, mbNo], 0) = mrYes;
end;

Altri suggerimenti

Per prima cosa, assicurarsi che i pulsanti nella finestra di messaggio corrispondono al testo. Quindi, se il testo è "Vuoi davvero uscire?" poi i pulsanti dovrebbero essere "Sì" e "No".

In secondo luogo, utilizzare le costanti appropriate, in modo che il codice è più facile da leggere in seguito. Che sarebbe:

var
  Res: integer;

Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?',
  MB_ICONQUESTION or MB_YESNO);

Il risultato sarà quindi sia IDYES o COD. Quindi, supponendo che la chiamata è all'interno di un metodo del modulo principale, si dovrebbe utilizzare come:

if Res = IDYES then
  Close;

Se si chiama questo da un altro luogo, si potrebbe anche chiamare

if Res = IDYES then
  Application.Terminate;

Modifica Si prega di controllare anche la Vista l'utente Linee guida inteface nelle finestre di dialogo che dichiarano:

  

conferme inutili sono fastidiosi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top