![]() |
Re: Event: Form über Schließen-Kreuz beenden
was für wege gibt es denn noch die anders behandelt werden müssen als Alt+F4 und das Schließenkreuz? Du kannst ja auch anders herum an die sache ran gehen. Nicht heraus finden ob Alt+F4 gedrückt wurde sondern überprüfen ob es auf andere Art und Weise geschlossen wurde (da wäre eben die Frage welche anderen Arten du meinst welche dir nicht zusagen)
|
Re: Event: Form über Schließen-Kreuz beenden
Es gibt im Prinzip 2 Arten, wie dieses Form geschlossen wird.
1.) Die Bearbeitungsprozedur läuft normal ab und es wird Close im Quelltext aufgerufen. 2.) Der Anwender bricht die Prozedur ab, in dem er entweder auf "Abbrechen" klickt, Alt-F4 drückt oder eben das [x], dann wird die Prozedur nicht komplett abgearbeitet. Punkt 1 ist schon gelöst und das "Abbrechen"-Klicken in Punkt 2 auch, nur das mit Alt-F4 und [x] machen mir noch Probleme. |
Re: Event: Form über Schließen-Kreuz beenden
ich verstehe jetzt dein Problem nicht. Wenn du per Quelltext "Close" aufrufst kannst du eine Variable setzen und wenn diese gesetzt ist weißt du das so geschlossen wurde. Wenn auf "abbrechen" geklickt wurde kannst du ebenfalls eine Variable setzen. Alle anderen Varianten wäre dann eben ein schließen durch den Anwender per Alt+F4, Klick auf Kreuz, Per Message von anderem Programm etc. Welche andere Variante es ist braucht dich ja nicht interessieren oder sehe ich das falsch?
|
Re: Event: Form über Schließen-Kreuz beenden
schreib doch einfach ins FormCloseQuery:
Delphi-Quellcode:
if MessageDlg('Vorgang Abbrechen?',....) = mrYes then CanClose := True else CanClose := False;
|
Re: Event: Form über Schließen-Kreuz beenden
Ich befürchte, ich habe ein paar Infos vergessen.
Meine Bearbeitungsprozedur wird immer ausgeführt, egal ob sie komplett abgearbeitet wird oder der Benutzer "Abbrechen" drückt. Da die Bearbeitungsprozedur nicht zu der Form gehört, wo die Abbruchroutine sein soll (Sprich Button & Alt-F4 & [x]), steuere ich das ganze über eigene Events. Nachdem die Bearbeitungsprozedur verlassen wird, wird Close aufgerufen. Beim Klick auf "Abbrechen" kommt erst eine Abfrage, ob der Benutzer dies auch wirklich will, ansonsten wird die Prozedur sachgemäß abgearbeitet. Will der Benutzer nun wirklich abbrechen, wird ein weiteres Event ausgelöst, was eine Boolschen Wert setzt. Dieser Wert wird in der Bearbeitungsprozedur regelmäßig abgefragt, die dann entscheidet, ob sie weitermacht oder abbricht. Das heißt, wenn der Benutzer abbrechen möchte, wird noch nicht wirklich abgebrochen, sondern der Bearbeitungsprozedur mitgeteilt, dass sie ab jetzt eine andere Arbeit leisten muss. Wenn ich also vor dem Close eine Variable setzen würde, die abhänig von der Bearbeitungsroutine Wahr oder Falsch ist und ich dann z.B. im OnCloseQuery eine Abfrage mache, ob diese Variable gesetzt ist, wird es zu spät sein, wenn der Anwender sagen will, "doch kein Abbruch --> Weitermachen". Klingt kompliziert, ist auch so. :mrgreen: MFG Lorenz |
Re: Event: Form über Schließen-Kreuz beenden
Ach so, jetzt verstehe ich langsam. Also geht es dir sonstwo vorbei, ob der Benutzer nun Alt+F4 oder X gedrückt hat, du willst nur wissen, ob das der Fall war oder dein Abbrechen-Button, der im Endeffekt die Prozedur abbricht, die aber wiederum das Schließen vornimmt. Kann man das ungefähr so zusammenfassen:
Delphi-Quellcode:
?
begin
while not CancelClicked do begin DoSomething; end; Close; end; procedure TMyForm.CancelButtonClick(...); begin if MessageDlg(...) = mbYes then begin CancelClicked := true; end; end; Wenn ja, entzieht sich meiner Kenntnis, warum OnCloseQuery nicht so aussieht:
Delphi-Quellcode:
Done müsste dann natürlich noch am Ende der Bearbeitung (aber vor dem Close) auf true gesetzt werden. Oder hab ich da einen Denkfehler? :stupid:
procedure TMyForm.FormCloseQuery(...);
begin CanClose := true; if not CancelClicked and not Done then begin if MessageDlg(...) = mbYes then begin CancelClicked = true; CanClose := false; end end end; |
Re: Event: Form über Schließen-Kreuz beenden
Hi,
Zitat:
Aber ich kann nicht darauf warten, dass meine Prozedur (wie die while-schleife) fertig ist und danach im FormCloseQuery auf eine Variable zugreift, die erst nach Beenden dieser Prozedur gesetzt wird. Wenn ich dort bei der CloseQuery abfragen wollte, ob abgebrochen werden soll und der Benutzer mit Nein antwortet, kann ich nicht in der Bearbeitungsprozedur weitermachen, die ist ja schon beendet. Im Prinzip müsste das, was ob in CancelButtonClick steht aufgerufen werden, wenn ich das [x] (oder Alt+F4) drücke. MFG Lorenz |
Re: Event: Form über Schließen-Kreuz beenden
So, ich mach mal einen neuen Post auf, weil sich das Problem anscheinend aufgelöst hat. :thumb:
Wenn ich das [x] drücke oder Alt+F4, dann wird gar kein Ereignis ausgelöst, weil das Programm noch in der anderen Prozedur befindet, allerdings wird dann das CancelClick ausgeführt, auch wenn ich noch in der Prozedur bin. In diesem Fall ist das natürlich optimal für mich, da somit alles fertig ist und ich keine weiteren Fälle abfangen muss. Ich danke nochmals allen, die sich mit mir zusammen dem Problem gestellt haben und wünsche einen schönen Feierabend Lorenz |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz