Question générale pour MessageBoxes
-
22-08-2019 - |
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?
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