Allgemeine Frage für Message
-
22-08-2019 - |
Frage
messagebox (handle, '? Wollen Sie wirklich verlassen', 'Sind Sie sicher?', 1);
in dieser Taste gibt es zwei Dinge, was der Benutzer tun kann. ok und stornieren. welcher Code muss ich schreiben müssen, dass die Taste, um das Programm auf „ok“ wird geschlossen, und endet der Dialog, wenn Sie die Taste abbrechen?
Lösung
Delphi bietet bessere Lösungen für eine messagebox zeigt. Ich sollte die MessageDlg-Funktion verwenden. Der Rückgabewert der MessageDlg (und MessageBox) Funktion gibt die Benutzer Wahl. So können Sie, wenn Sie eine Ja-Taste auf der MessageDlg platzieren, wird der Rückgabewert mrYes sein, wenn der Benutzer auf die Schaltfläche Ja drückt. So Ihr Code würde wie folgt sein:
var
ShouldClose: Boolean;
begin
if MessageDlg('Do you really want to quit?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
ShouldClose := True
else
ShouldClose := False;
end;
Sie möchten auch Ihre Anwendung schließen, wenn die Benutzer wählt Ja. Wenn Sie eine normale Delphi VCL-Anwendung haben, können Sie das CloseQuery Ereignis implementieren von Ihnen Mainform wird das CloseQuery Ereignis ausgeführt wird, wenn Sie versuchen, Ihre Hauptform zu schließen (wie das Schließen-Knopf klicken) und hat eine variable CanClose. Einstellen CanClose auf True bedeutet, dass das Mainform in Ordnung ist zu schließen, ist es auf false gesetzt wird Ihre Hauptform vor der Schließung verhindern:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := MessageDlg('Do you really want to quit?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes;
end;
Andere Tipps
Stellen Sie zunächst sicher, dass die Schaltflächen im Meldungsfeld den Text entsprechen. Also, wenn der Text „Wollen Sie wirklich beenden?“ dann sollten die Tasten „Ja“ und „Nein“.
seinZweitens verwenden Sie die entsprechenden Konstanten, so dass Ihr Code ist einfacher später zu lesen. Das wäre:
var
Res: integer;
Res := Application.MessageBox('Do you really want to exit?', 'Are you sure?',
MB_ICONQUESTION or MB_YESNO);
Das Ergebnis wird dann entweder IDYES oder IDNO sein. So unter der Annahme, dass der Anruf innerhalb einer Methode Ihrer Hauptform ist, würden Sie es mögen:
if Res = IDYES then
Close;
Wenn Sie dies von einem anderen Ort anrufen, können Sie auch anrufen
if Res = IDYES then
Application.Terminate;
Edit: Bitte beachten Sie auch die Vista User-Inteface Leitlinien für Dialogfelder den Zustand:
Unnötige Bestätigungen sind ärgerlich