rechte Mausknopf hat drei EventIds

Fragen und Bugreports zur PureBasic 4.0-Beta.
mar
Beiträge: 107
Registriert: 06.08.2005 14:49

rechte Mausknopf hat drei EventIds

Beitrag 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
mar
Beiträge: 107
Registriert: 06.08.2005 14:49

Beitrag 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.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag 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:
mar
Beiträge: 107
Registriert: 06.08.2005 14:49

Beitrag von mar »

Danke

Den Workaround für das mehrmalige Auftreten
des Events bei einem Klick habe ich eh schon eingebaut.

:allright:
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag 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...
mar
Beiträge: 107
Registriert: 06.08.2005 14:49

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
mar
Beiträge: 107
Registriert: 06.08.2005 14:49

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