AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Event: Form über Schließen-Kreuz beenden

Ein Thema von Reinhardtinho · begonnen am 1. Okt 2007 · letzter Beitrag vom 1. Okt 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 12:53
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#12

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 13:06
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.
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 13:14
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#14

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 13:42
schreib doch einfach ins FormCloseQuery:
  if MessageDlg('Vorgang Abbrechen?',....) = mrYes then CanClose := True else CanClose := False;
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#15

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 13:45
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.


MFG
Lorenz
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#16

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 14:57
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:
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;
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?
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#17

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 15:14
Hi,

Zitat von OregonGhost:
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;
Das ist schon mal absolut richtig. So sehen meine Schleife und meine Abbruchbedingung auch in etwa aus (bei mir über Event-Steuerung).

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
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#18

Re: Event: Form über Schließen-Kreuz beenden

  Alt 1. Okt 2007, 15:54
So, ich mach mal einen neuen Post auf, weil sich das Problem anscheinend aufgelöst hat.

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
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz