Seite 1 von 2
rechte Mausknopf hat drei EventIds
Verfasst: 07.05.2006 22:39
von mar
Hi ich habe Probs bei der Auswertung der EventIds.
Der linke Mousebutton wirft 2 events 13100-down und 514-up.
Der rechte wirft drei 516-down und 517 & 13100-up
Also ist 13100 zweimal verwendet einmal für lmbDown und
das andere Mal für rmbUp.
Das macht unnötig Logik nötig, um es wieder grade zu biegen.
(ps Abgesehen davon, dass ich noch nicht die Konstanten gefunden habe.)
Hier der Code zum Testen:
Code: Alles auswählen
If OpenWindow(0,0,0,200, 200 ,"Events",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
WindowID_0=WindowID(0) : CreateGadgetList(WindowID_0)
ImageGadget(0,0,0,width,height,CreateImage(0,200,200))
Repeat
eventid=WaitWindowEvent()
;Debug eventid
Select eventid
Case 13100 ; #WM_LBUTTONDOWN
Debug eventid
Case #WM_LBUTTONUP
Debug eventid
Case 516 ; #WM_RBUTTONDOWN
Debug eventid
Case 517 ;#WM_RBUTTONUP
Debug eventid
Case 13101 ;EventMenu
Debug eventid
EndSelect
Until eventid=#PB_Event_CloseWindow
EndIf
Verfasst: 08.05.2006 05:52
von mar
Na gut - dann noch etwas:
wenn man die Maus bewegt und dann die linke Maustaste
drückt bekommt man zweimal/dreimal das Event
LeftMouseButtonDown.
Verfasst: 08.05.2006 08:14
von Pelagio
Um eine saubere Anwort zu bekommen sollte man nach dem abfangen der Ereignisse WindowEvent() benutzen.
Code: Alles auswählen
If OpenWindow(0,0,0,200, 200 ,"Events",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
WindowID_0=WindowID(0) : CreateGadgetList(WindowID_0)
ImageGadget(0,0,0,width,height,CreateImage(0,200,200))
Repeat
eventid=WaitWindowEvent()
Select eventid
Case 13100 ; #WM_LBUTTONDOWN
Debug eventid :WindowEvent()
Case #WM_LBUTTONUP
Debug eventid :WindowEvent()
Case 516 ; #WM_RBUTTONDOWN
Debug eventid :WindowEvent()
Case 517 ;#WM_RBUTTONUP
Debug eventid :WindowEvent()
EndSelect
Until eventid=#PB_Event_CloseWindow
EndIf
Dies läst allerdings nicht das Ereigniss LeftMouseButton beim bewegen davon abhalten zweimal aufzutreten.

Verfasst: 08.05.2006 09:28
von mar
Danke
Den Workaround für das mehrmalige Auftreten
des Events bei einem Klick habe ich eh schon eingebaut.

Verfasst: 08.05.2006 11:48
von PureLust
Pelagio hat geschrieben:
Um eine saubere Anwort zu bekommen sollte man
nach dem abfangen der Ereignisse WindowEvent() benutzen.
Würde das denn nicht bedeuten, dass Du manchmal einfach ein paar Events 'verschluckst' wenn mehrere verschiedene Events in der Eventliste stehen ???

Verfasst: 08.05.2006 12:26
von hardfalcon
Hört sich so an. Wenn ein Event abgefangen ist, gilt es als "verarbeitet", und dann hat sichs... So stell ichs mir mal vor...
Verfasst: 08.05.2006 13:25
von mar
Hi,
es tritt doch nur ein mehrfaches Events beim Bewegen der Maus und
gleichzeitigem Drücken der Maustaste auf. Ich muss somit
meine Eventroutine erst wieder scharf machen, wenn der linke
Mausknopf wieder losgelassen wurde. So kann sie nicht zweimal
hintereinander für ein Ereignis aufgerufen werden.
Besser wär natürlich - eine eindeutige Ereigniszuweisung in PB.
Verfasst: 08.05.2006 13:36
von Kaeru Gaman
1) das select-case für solche test-geschichten halte ich für unpraktisch..
Code: Alles auswählen
Repeat
EventID = WindowEvent()
If EventID <> OldEvent
OldEvent = EventID
Debug EventID
EndIf
Until EventID = #PB_Event_CloseWindow
damit kann man genauer sehen, welches event wann stattfindet, und welche man vielleicht sonst übersieht...
2) von einem zusätzlichen WindowEvent() halte ich garnichts, sowas finde ich gruselig, kryptisiert das ganze nur, und außerdem
> Dies läst allerdings nicht das Ereigniss LeftMouseButton beim bewegen davon abhalten zweimal aufzutreten.
3) ich würde mal das ganze in eine andere versuchsanordnung packen, ich habe nämlich den verdacht, dass das Debuggen selbst ein Event im Debuggerfenster auslöst, und damit evtl. ein Event im Ursprungsfenster dupliziert.
[edit]
4) jeder button hat ein down-, ein hold- und ein up-event...
und wenn ich mich recht entsinne, tritt das 13000er event nur über gadgets auf.... irgendwas war da noch, hab grad kein PB zur hand zum nachtesten...
Verfasst: 08.05.2006 14:53
von edel
13100 = #PB_Event_Gadget
Heisst das ein Event auf einem Gadget stattgefunden hat.
Dabei ist es egal ob rechte oder linke Maustaste.
Fuer richtiges Eventhandling liest du dir am besten nochmal
die Hilfe (Windows / WindowsEvent) durch.
Verfasst: 08.05.2006 18:18
von mar
Also ich weiß nicht so recht, ob ihr mich meint????
Mein Favorit für events wär schon WaitWindowEvent.
Allerdings macht es auch Sinn das Gadget direkt abzufragen.
-> werde ich gleich mal testen
Nur weiß ich nicht, wofür die anderen events geworfen werden,
wenn ich dann doch über das gadgetevent gehe. Das macht doch
nur künstlich PB langsamer.
