Seite 1 von 1

Eventschleife - wie behandeln? [erledigt]

Verfasst: Sa, 22. Aug 2020 10:58
von Wolfgang_B
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?

Re: Eventschleife - wie behandeln?

Verfasst: Sa, 22. Aug 2020 12:26
von brandelh
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:

Re: Eventschleife - wie behandeln?

Verfasst: Sa, 22. Aug 2020 13:26
von Werner_Bayern
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

Re: Eventschleife - wie behandeln?

Verfasst: Sa, 22. Aug 2020 13:58
von Wolfgang Ciriack
Wolfgang, nutzt du eXPress++ ?

Re: Eventschleife - wie behandeln?

Verfasst: Sa, 22. Aug 2020 16:04
von georg
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.

Re: Eventschleife - wie behandeln?

Verfasst: Sa, 22. Aug 2020 16:51
von Wolfgang_B
Wolfgang - ich habe zwar eXpress, liegt aber seit dem Kauf brav im Schrank...

Re: Eventschleife - wie behandeln?

Verfasst: Sa, 22. Aug 2020 18:24
von Werner_Bayern
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.

Re: Eventschleife - wie behandeln?

Verfasst: Sa, 22. Aug 2020 20:31
von AUGE_OHR
hi,

Code: Alles auswählen

LOCAL lExit := .F.

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

   DO WHILE !lExit = .T.

Re: Eventschleife - wie behandeln?

Verfasst: Mi, 02. Sep 2020 12:41
von Wolfgang_B
sorry, hatte vor lauter Gartenbau vergessen, mich zu bedanken!!

Also Vielen Dank für die Tipp!