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?

War es hilfreich?

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“.

sein

Zweitens 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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top