AppEvent()

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
saul
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 284
Registriert: So, 26. Mär 2006 12:23

AppEvent()

Beitrag von saul »

Guten Morgen, ein frohes neues Jahr und ein gesundes 2013 und folgende,
in der Hilfe steht unter
<nTimeOut>

<nTimeOut> ist ein ganzzahliger, numerischer Wert, der ein Zeitintervall in 1/100 Sekunden angibt. Wenn sich kein Ereignis in der Warteschlange befindet, wartet die Funktion AppEvent() <nTimeOut> mal 0.01 Sekunden, bevor die Ausführung eines Programms fortgesetzt wird. Der Standardwert ist 0 und in diesem Fall wartet AppEvent() so lange, bis sich ein Ereignis in der Warteschlange befindet.
Zum Verständnis habe ich das Beispielprogramm aus der Hilfe genommen

Code: Alles auswählen

#include "Appevent.ch"

   PROCEDURE Main
      LOCAL nEvent := 0, mp1, mp2

      CLEAR
      @ 0,0 SAY "Zum Abbrechen rechte Maustaste drücken"
      SetMouse(.T.)

      DO WHILE nEvent <> xbeM_RbDown
         nEvent := AppEvent( @mp1, @mp2, , 0)
         IF nEvent < xbeB_Event
            ? "Der Event-Code für die Taste lautet:", nEvent
            ? "Die Message-Parameter enthalten    :", mp1, mp2
         ELSE
            ? "Der Event-Code für die Maus lautet:", nEvent
            ? "Die Message-Parameter enthalten   :", mp1, mp2
         ENDIF
      ENDDO
   RETURN
Nun sitzte ich vor dem erzeugten Bildschirm und bewege weder ein Maus noch eine Taste. Da hätte ich mir jetzt erwartet, dass auch nichts passiert, da timeout ja 0 ist und ich kein Ereignis mit Maus oder Tastatur in die Warteschlange gelegt habe. Weit gefehlt in regelmäßigen Abständen wird ein Viererblock von Events aufgelistet.

Was habe ich da falsch verstanden?

mfg
Wolfgang
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2824
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: AppEvent()

Beitrag von georg »

Hallo, Wolfgang -


willkommen in 2013, dem Jahr der ungelösten Windows-Rätsel ...

Wenn Du mittels Debugger einen Breakpoint auf den Befehl nach dem AppEvent(...) setzt, kannst Du Dir den Wert von nEvent mal ansehen und in der AppEvent.ch nachschlage (allerdings muss man da auch ein wenig rechnen bei den meisten Werten).

Das grundlegende problem mag aber daran liegen, dass Du nicht der einzige Benutzer Deines Programms bist, Windows will auch "mit"spielen. AppEvent(...) liefert Ereignisse zurück, die nicht nur von Tastatur und Maus kommen, sondern auch aus Windows. Ich weiss, Du hast das nicht gemacht, aber Timer-Events könnten reinkommen, und und und
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: AppEvent()

Beitrag von AUGE_OHR »

saul hat geschrieben:Was habe ich da falsch verstanden?
es liegt am dem Beispiel ... es behandelt nur xbeB_Event und nicht xbe_None
Wird für <nTimeOut> ein Wert größer als 0 angegeben, gibt die Funktion spätestens nach Ablauf dieses Zeitintervalls einen Ereigniscode zurück. Falls innerhalb dieser Zeitspanne kein Ereignis eingetreten ist, wird xbe_None zurückgegeben und alle per Referenz übergebenen Parameter haben den Wert NIL.
der Vode muss also so aussehen

Code: Alles auswählen

      DO WHILE .NOT. lExit
         nEvent := AppEvent( @mp1, @mp2,@oXbp, 100) 
         DO CASE
              // als erstes auf Timeout prüfen wenn 4th Parameter
              CASE nEvent = xbe_None
              ...
         OTHERWISE
              oXbp:handleEvent( nEvent, mp1, mp2 )
         ENDCASE
      ENDDO 
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: AppEvent()

Beitrag von UliTs »

AUGE_OHR hat geschrieben:
saul hat geschrieben:Was habe ich da falsch verstanden?
es liegt am dem Beispiel ... es behandelt nur xbeB_Event und nicht xbe_None
...
Falsch Jimmy, da nTimeOut=0!

Die Ursache ist die von Georg genannte :-) .

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: AppEvent()

Beitrag von AUGE_OHR »

UliTs hat geschrieben:
AUGE_OHR hat geschrieben:
saul hat geschrieben:Was habe ich da falsch verstanden?
es liegt am dem Beispiel ... es behandelt nur xbeB_Event und nicht xbe_None
...
Falsch Jimmy, da nTimeOut=0!
Moin ...
wenn der 4th Parameter 0 ist wird kein xbe_None gesendet ... das hat ja nichts mit xbeB_Event zu tun was ja nur sagt "das" ein Event > 0 gesendet wurde.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: AppEvent()

Beitrag von AUGE_OHR »

UliTs hat geschrieben:
AUGE_OHR hat geschrieben:
saul hat geschrieben:Was habe ich da falsch verstanden?
es liegt am dem Beispiel ... es behandelt nur xbeB_Event und nicht xbe_None
...
Falsch Jimmy, da nTimeOut=0!
Moin ...
wenn der 4th Parameter 0 ist wird kein xbe_None gesendet ... das hat ja nichts mit xbeB_Event zu tun was ja nur sagt "das" ein Event > 0 gesendet wurde.
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: AppEvent()

Beitrag von UliTs »

Ne ne Jimmy, da gibt es nichts schön zu reden 8) :D
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: AppEvent()

Beitrag von AUGE_OHR »

UliTs hat geschrieben:Ne ne Jimmy, da gibt es nichts schön zu reden 8) :D
was willst du mir einreden ... hast wohl zu lange gefeiert ? :badgrin:
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: AppEvent()

Beitrag von AUGE_OHR »

ok vielleicht sollte ich es näher erklären
alle Xbase++ Events bauen auf xbeB_Event auf siehe AppEvent.CH
#define xbeB_Event 1048576

// Generische Nachrichten
#define xbeP_None (001 + xbeB_Event)

// Maus Nachrichten (fr VIO und PM Mode)
//
für XbParts gelten die xbeP_xxx sowie spezifische Events.

bei einer Abfrage

Code: Alles auswählen

IF nEvent < xbeB_Event 
wird also ein Event "beachtet" der nicht zu Xbase++ gehört bzw. nicht "normal verarbeitet" werden kann.

Das Help Demo ist deshalb nur verwirrend und erklärt den 4th Parameter unzureichend.
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: AppEvent()

Beitrag von UliTs »

Jimmy,
Was soll das!

Du erzählst eindeutig Quatsch, was Wolfgangs Frage anging.
Da kannst Du ruhig ueber Deinen Schatten springen und musst nicht mit anderen Dingen, die sicher auch sinnvoll sein koennen, ablenken :-)

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: AppEvent()

Beitrag von AUGE_OHR »

UliTs hat geschrieben:Was soll das!
LIES mal GENAU was Wolfgang schreibt
Weit gefehlt in regelmäßigen Abständen wird ein Viererblock von Events aufgelistet.
Was habe ich da falsch verstanden?
und das ist die Abfrage :

Code: Alles auswählen

IF nEvent < xbeB_Event 
UliTs hat geschrieben:Du erzählst eindeutig Quatsch, was Wolfgangs Frage anging.
hast du es immer noch nicht begriffen ???

ALLE Xbase++ Events sind auf xbeB_Event aufgebaut und werden "grösser"
wenn nun ein Event < xbeB_Event sein sollte ist es KEIN Xbase++ Event !!!

wenn nun ein Event "eintrifft", egal < oder >, "erlischt" der 4th Parameter wie gewöhnlich und kann auf die Abfrage

Code: Alles auswählen

IF nEvent < xbeB_Event 
treffen.
UliTs hat geschrieben:Da kannst Du ruhig ueber Deinen Schatten springen und musst nicht mit anderen Dingen, die sicher auch sinnvoll sein koennen, ablenken :-)
jeder mag selbst beurteilen wer Informationen liefert und wer Dumtüch schreibt.
gruss by OHR
Jimmy
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: AppEvent()

Beitrag von UliTs »

Jimmy,
Das machst Du doch absichtlich!
So blöd kann man nicht sein...
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Antworten