Delphi/Lazarus: "Wollen Sie wirklich beenden?"-Dialog beim Schließen einer Form anzeigen
Info von Stefan Trost | Letztes Update am 19.01.2023 | Erstellt am 29.03.2013
Wenn ein Nutzer seine Eingaben, seine Änderungen oder seine sonstigen Arbeiten in einer Anwendung nicht gespeichert hat und versucht das Programm oder das betreffende Fenster zu schließen, ist es manchmal gewünscht einen Dialog wie "Sie haben Ihre Änderungen noch nicht gespeichert. Wollen Sie das Programm wirklich beenden?" anzuzeigen. In diesem Tutorial zeige ich euch, wie ihr ein solches Hinweisfenster mit Delphi oder Lazarus realisieren könnt.
Wir implementieren die Anzeige unseres Dialogs im OnCloseQuery-Event unserer Form. Dazu klicken wir auf unsere Form und suchen im Objekt-Inspektor die entsprechende Prozedur heraus. OnCloseQuery wird jedes mal ausgeführt, bevor eine Form geschlossen wird und wir können hier noch Einfluss darauf nehmen, ob die Form wirklich geschlossen werden darf.
Unsere OnCloseQuery-Prozedur könnte zum Beispiel so aussehen:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); var AMsg: String; begin AMsg := 'Sie haben Ihre Änderungen nicht gespeichert. Wollen Sie wirklich beenden?'; if MessageDlg(AMsg, mtConfirmation, [mbOk, mbCancel], 0) = mrCancel then CanClose := false; end;
Setzen wir innerhalb von OnCloseQuery die Variable CanClose auf false, wird das Fenster nicht geschlossen und der Nutzer gelangt zurück zum Programm. Wir zeigen dem Nutzer einen Message-Dialog an, in dem der Nutzer entweder auf "OK" (schließen) oder "Abbrechen" (nicht schließen) klicken kann. Gibt der Dialog "mrCancel" zurück, das heißt es wurde auf "Abbrechen" geklickt, wird CanClose auf false gesetzt und der Nutzer kehrt zum Programm zurück.
Prüfung auf Änderungen
Natürlich kann man diesen Code noch dahingehend verbessern beziehungsweise erweitern, dass die Meldung nur angezeigt wird, wenn tatsächlich auch Änderungen vorgenommen wurden und diese noch nicht gespeichert wurden.
Dazu kann man eine globale Variable (zum Beispiel könnte man sie "isSaved" nennen) einführen, die zu Beginn auf "true" steht und bei jeder Änderung auf "false" gesetzt wird. Sobald der Nutzer seine Änderungen speichert wird die Variable wieder auf "true" gesetzt und das Spiel beginnt mit den ersten Änderungen von vorn. Im OnCloseQuery-Event wird dann die Meldung nur angezeigt, wenn die Variable auf "false" steht, also wirklich noch nicht abgespeichert wurde.
Über den Autor
Software von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen
Ähnliche Themen
Delphi: Event Reihenfolge einer Form - Von OnCreate bis OnDestroy
Info | 1 Kommentar
MacOS: Abgestürzte Programme beenden
Tutorial | 0 Kommentare
Ist das Liebeskummer oder was anderes?
Offene Frage | 1 Antwort
Windows Batch Script: Computer herunterfahren
Tutorial | 2 Kommentare
VirtualBox: Datum und Uhrzeit ändern
Tutorial | 10 Kommentare
Delphi/Lazarus: Kommandozeilen Parameter Tutorial Teil 1: Senden
Tutorial | 0 Kommentare
Delphi: Systemweiter HotKey
Tutorial | 3 Kommentare
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.