Eventschleife - wie behandeln?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 349
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Eventschleife - wie behandeln?

Beitrag von Wolfgang_B » Sa, 22. Aug 2020 10:58

Guten Morgen,

ich stehe momentan auf dem Schlauch in der Behandlung einer Eventschleife. Ich möchte, daß ein Fenster nur dann verlassen werden kann, wenn ein bestimmter Rückgabewert einer Funktion vorliegt. Das soll speziell in diesem Fall greifen, wenn der Anwender das Fenster mit oDlg:close schließen will. so soll z.B. verhindert werden, daß das Fenster geschlossen wird, wenn noch Daten vorhanden sind, die noch nicht gespeichert sind.

Gibts da irgendeine Literatur, bei der man lernen kann, wie man die Eventschleife behandelt?
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15215
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 6 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Eventschleife - wie behandeln?

Beitrag von brandelh » Sa, 22. Aug 2020 12:26

Dafür musst du die Klasse ableiten und in der Close Methode prüfen ob das schon geschlossen werden darf.
Ich meine der codeblock reicht nicht, bin mir aber nicht sicher.
Das komplette Programm gegen Windows zu schützen ist aber problematisch.

Ich schaue mal später wo ich sowas gemacht habe, ist schon eine Weile her :wink:
Gruß
Hubert

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1811
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: Eventschleife - wie behandeln?

Beitrag von Werner_Bayern » Sa, 22. Aug 2020 13:26

Servus Wolfgang,

setz einfach eine Variable, die Du in der Event-Schleife, die für das Fenster zuständig ist, abfrägst:

Code: Alles auswählen

      do while nEvent <> xbeP_Close
         nEvent := AppEvent(@mp1, @mp2, @oXbp)
         if nEvent == xbeP_Close .and. .not. lBeenden
            nEvent := xbe_None   
            if janein("Buchung / Überweisung wirklich abbrechen?")
               lBeenden := .t.
               PostAppEvent(xbeP_Close,,, oFenster)
            endif
         else
            oXbp:handleEvent( nEvent, mp1, mp2 )
         endif
      enddo
es grüßt

Werner

<when the music is over, turn off the light!>

Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2643
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 1 Mal
Kontaktdaten:

Re: Eventschleife - wie behandeln?

Beitrag von Wolfgang Ciriack » Sa, 22. Aug 2020 13:58

Wolfgang, nutzt du eXPress++ ?
Viele Grüße
Wolfgang

georg
Foren-Administrator
Foren-Administrator
Beiträge: 2661
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 11 Mal

Re: Eventschleife - wie behandeln?

Beitrag von georg » Sa, 22. Aug 2020 16:04

Hallo, Wolfgang -


es gibt viele Möglichkeiten - ich nutze grundsätzlich für jedes Fenster einen eigenen Thread, der einen eigenen Event-Loop hat. Diesen kann ich dann entsprechend anpassen.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 349
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: Eventschleife - wie behandeln?

Beitrag von Wolfgang_B » Sa, 22. Aug 2020 16:51

Wolfgang - ich habe zwar eXpress, liegt aber seit dem Kauf brav im Schrank...
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.

Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1811
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: Eventschleife - wie behandeln?

Beitrag von Werner_Bayern » Sa, 22. Aug 2020 18:24

Wie Georg sagt, es gibt viele Möglichkeiten. Eine weitere, einfache Möglichkeit wäre z. B. im Close-Codeblock Deines Fensters das entsprechend behandeln.
es grüßt

Werner

<when the music is over, turn off the light!>

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12436
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: Eventschleife - wie behandeln?

Beitrag von AUGE_OHR » Sa, 22. Aug 2020 20:31

hi,

Code: Alles auswählen

LOCAL lExit := .F.

   oDlg:Close := {|| IF( CheckOk(oDlg:aEditControl), lExit := .T.,  ) }

   DO WHILE !lExit = .T.
gruss by OHR
Jimmy

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 349
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: Eventschleife - wie behandeln?

Beitrag von Wolfgang_B » Mi, 02. Sep 2020 12:41

sorry, hatte vor lauter Gartenbau vergessen, mich zu bedanken!!

Also Vielen Dank für die Tipp!
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.

Antworten