WaitEvent() liefert 2 Events hintereinander?

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Hubsi

Betreff: WaitEvent() liefert 2 Events hintereinander?

BeitragSo, Nov 05, 2017 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Nabend zusammen.

Ich versuche die "clicks" am Mausrad zu zählen und ganz simpel erstmal in der Titelleiste auszugeben zum experimentieren. Und schon gibts die ersten unlogischen Probleme Very Happy

BlitzBasic: [AUSKLAPPEN]
Global window_main=CreateWindow("Perforator 1.0",100,50,800,600)
Global menu_start=CreateMenu("Start",100,WindowMenu(window_main))

Local pos_abs#,event,pos_ticks

menu_101=CreateMenu("Liste laden",101,menu_start)
menu_102=CreateMenu("Liste speichern",102,menu_start)
menu_103=CreateMenu("Liste speichern unter...",103,menu_start)

UpdateWindowMenu(window_main)



Repeat
Select WaitEvent()
Case $204
pos_ticks=pos_ticks+EventData()
SetGadgetText(window_main,pos_ticks)
;FlushEvents()
Case $803
End
End Select

Forever


Wenn ich am Mausrad drehe werden immer 2 "clicks" gezählt, nehme ich das FlushEvents() mit rein wird der unsinnige Event gekillt und es passt. Was ich dabei am allerwenigsten verstehe ist das das Beispiel aus der Hilfe ( https://www.blitzforum.de/help/WaitEvent ) funktioniert. Mein Code ist doch im Prinzip nicht anders?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Xeres

Moderator

BeitragSo, Nov 05, 2017 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Am Mausrad drehen sind keine Klicks, sondern Zeilen die weitergescrollt werden - schau dir deine Windows Einstellungen an, da ist irgendwo standardmäßig "2" eingestellt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Nov 05, 2017 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

bei mir kommt nur ein Event beim drehen des Mausrades und immer nur +1 oder -1

in den Windows Einstellungen sind 3 Zeilen angegeben!

Code: [AUSKLAPPEN]
Repeat
ev =  WaitEvent()
DebugLog Hex (ev)
   Select ev
   
   Case $204
      pos_ticks=pos_ticks+EventData()
      DebugLog EventData ()
      SetGadgetText(window_main,pos_ticks)
      ;FlushEvents()
   Case $803
      End
   End Select

Forever
[BB2D | BB3D | BB+]

Thunder

BeitragMo, Nov 06, 2017 10:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Könnte an deiner Maus liegen. Hatte mal eine Maus mit kaputtem Mausrad. Die lieferte dann hin und wieder 2 Events (leider immer in die entgegengesetzte richtung, also hinauf-hinunter oder hinunter-hinauf).
Wenn du nach einem Maus-Event FlushEvents verwendest, verlierst du natürlich zukünftige Events die schon gequeuet sind! D.h. falls du das als Workaround verwendest, gib zumindest die EventID als Parameter an, damit du nicht andere Events auch rausschmeißt.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

Hubsi

BeitragDi, Nov 07, 2017 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal. Die Einstellung in Windows mit den Zeilen habe ich überprüft, da kann ich einstellen was ich will, ändert nichts (in meinem Proggi zumindest). Was seltsam ist, ist das der Beispielcode aus der Hilfe ja einwandfrei funktioniert? Ich mach im Kern ja nichts anderes?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Midimaster

BeitragDi, Nov 07, 2017 14:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Zwei Tipps zur Fehlersuche:


Hast Du Deinen Code wirklich mal "stand-alone" probiert oder immer innerhalb Deines Projektes? Bei mir funktioniert er einwandfrei. Möglicherweise kommt der Effekt ja von ganz wo anders her.

Um herauszufinden, ob der Event immer eine "2" sendet oder 2x erscheint, baust Du am besten mal eine weitere Zeile in den Testcode:

BlitzBasic: [AUSKLAPPEN]
	Case $204
pos_ticks=pos_ticks+EventData()
SetGadgetText(window_main,pos_ticks)
DebugLog MilliSecs() + " " + EventData() + " " + pos_ticks
;FlushEvents()
Case $803
....


Was kannst Du beobachten?



Ebenso kannst Du ja mal den Beispielcode aus dem BB-Manual solange immer weiter reduzieren, bis der Effekt auch hier auftritt. Beginne mit dem gesamten Beispielcode. Wirf ein paar Zeilen raus und teste dann. Dann wirf weitere Zeilen raus und teste wieder, u.s.w.

Was kannst Du beobachten?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

Hubsi

BeitragMi, Nov 08, 2017 12:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank, hab jetzt ziel und planlos weiter gebastelt Very Happy und jetzt machts was es soll. Was jetzt (im Kern) anders ist als vorher weiß ich aber auch nicht.
BlitzBasic: [AUSKLAPPEN]
Global window_main=CreateWindow("Perforator 1.0",100,50,800,600)
Global menu_start=CreateMenu("Start",100,WindowMenu(window_main))

Local pos_abs#,event,ev_data,pos_ticks
Local menu_101,menu_102,menu_103,menu_104,menu_105,menu_110
Local output

menu_101=CreateMenu("Liste laden",101,menu_start)
menu_102=CreateMenu("Liste speichern",102,menu_start)
menu_103=CreateMenu("Liste speichern unter...",103,menu_start)
menu_110=CreateMenu("",110,menu_start)
menu_104=CreateMenu("Beenden",104,menu_start)

output=CreateTextArea(10,400,760,100,window_main,65536)

UpdateWindowMenu(window_main)



Repeat
event=WaitEvent(0)

If event<>0 Then

ev_data=EventSource()

If event=$204 Then
pos_ticks=pos_ticks+EventData()
AddTextAreaText(output,pos_ticks+Chr$(13)+Chr$(10))
EndIf

If event=$803 Then
End
EndIf

If event=$101 Then
If EventData()=1 Then End
EndIf

FlushEvents()

EndIf

Forever


Vielleicht kann mir noch jemand den Hintergrund erklären, aber vorerst funktionierts erstmal Very Happy

Edit: Seh gerade das das FlushEvents() noch drin ist. Ohne das ists wieder der alte Käse, also doch nicht gelöst Surprised
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Holzchopf

Meisterpacker

BeitragMi, Nov 08, 2017 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich feuert sowohl das Hauptfenster wie auch die TextArea einen MouseZ-Event. Überprüfe mal EventSource für beide Events.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group