Question

messagebox (poignée, '? Voulez-vous vraiment quitter', 'êtes-vous sûr?', 1);

dans ce bouton, il y a deux choses, ce que l'utilisateur peut faire. ok et annuler. quel code dois-je écrire, que le bouton ferme le programme à « ok » et se termine le dialogue, lorsque vous appuyez sur annuler?

Était-ce utile?

La solution

Delphi fournit de meilleures solutions pour montrer messageBox. Je dois utiliser la fonction MessageDlg. La valeur de retour de la fonction MessageDlg (et MessageBox) indique le choix des utilisateurs. Donc, lorsque vous placez un bouton oui sur la MessageDlg, la valeur de retour sera mrYes lorsque l'utilisateur appuie sur le bouton Oui. Donc, votre code serait comme ceci:

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

Vous voulez également fermer votre application si les utilisateurs répond oui. Lorsque vous avez une application normale Delphi VCL, vous pouvez mettre en œuvre l'événement CloseQuery vous Mainform, l'événement CloseQuery est exécuté lorsque vous essayez de fermer votre mainform (comme en cliquant sur le closebutton) et a une CanClose variable. Réglage CanClose True signifie que le MainForm est OK pour fermer, mettre à false empêchera votre mainform de fermeture:

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

Autres conseils

Tout d'abord, assurez-vous que les boutons de la boîte de message correspondent au texte. Donc, si le texte est « Voulez-vous vraiment quitter? » puis les boutons doivent être « Oui » et « Non ».

En second lieu, utiliser les constantes appropriées, de sorte que votre code est plus facile à lire plus tard. Ce serait:

var
  Res: integer;

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

Le résultat sera alors soit IDYES ou IDNO. Donc, en supposant que l'appel est à l'intérieur d'une méthode de votre principale forme, vous l'utiliser comme:

if Res = IDYES then
  Close;

Si vous appelez depuis un autre lieu, vous pouvez aussi appeler

if Res = IDYES then
  Application.Terminate;

Modifier S'il vous plaît faire vérifier également le Vista utilisateur inteface lignes directrices sur les boîtes de dialogue qui état:

  

confirmations inutiles sont ennuyeux

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top