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
:allright:
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.
:allright:

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.

:allright:

Verfasst: 08.05.2006 11:48
von PureLust
Pelagio hat geschrieben::allright:
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 ??? :o

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.
:|