Seite 1 von 2

Problem beim Auslesen ver-oder-ter Werte

Verfasst: 12.05.2017 12:19
von Kiffi
Hallo,

ich habe eine Variable, in der ich eine oder mehrere #PB_EventType - Konstanten ver-oder-t ablege.

z.B.:

Code: Alles auswählen

eType = #PB_EventType_LeftClick 
oder

Code: Alles auswählen

eType = #PB_EventType_LeftClick | #PB_EventType_LeftDoubleClick
Nun möchte ich abfragen, welche EventTypes in der Variablen vorhanden sind:

Code: Alles auswählen

Debug "#PB_EventType_LeftClick: " + Bool(eType & #PB_EventType_LeftClick = #PB_EventType_LeftClick)
oder

Code: Alles auswählen

Debug "#PB_EventType_LeftDoubleClick: " + Bool(eType & #PB_EventType_LeftDoubleClick = #PB_EventType_LeftDoubleClick)
Mein Problem ist, dass #PB_EventType_LeftClick den Wert 0 hat. Ich bekomme also mit der Abfrage Bool(eType & #PB_EventType_LeftClick = #PB_EventType_LeftClick) immer eine 1 zurück.

Wie kann man das geschickt lösen?

hier nochmal der gesamte Code zum spielen:

Code: Alles auswählen

eType = #PB_EventType_LeftClick

Debug "eType = #PB_EventType_LeftClick"
Debug "#PB_EventType_LeftClick: " + Bool(eType & #PB_EventType_LeftClick = #PB_EventType_LeftClick)
Debug "#PB_EventType_LeftDoubleClick: " + Bool(eType & #PB_EventType_LeftDoubleClick = #PB_EventType_LeftDoubleClick)
Debug "------------------"

eType = #PB_EventType_LeftDoubleClick

Debug "eType = #PB_EventType_LeftDoubleClick"
Debug "#PB_EventType_LeftClick: " + Bool(eType & #PB_EventType_LeftClick = #PB_EventType_LeftClick)
Debug "#PB_EventType_LeftDoubleClick: " + Bool(eType & #PB_EventType_LeftDoubleClick = #PB_EventType_LeftDoubleClick)
Debug "------------------"

eType = #PB_EventType_LeftClick | #PB_EventType_LeftDoubleClick

Debug "eType = #PB_EventType_LeftClick | #PB_EventType_LeftDoubleClick"
Debug "#PB_EventType_LeftClick: " + Bool(eType & #PB_EventType_LeftClick = #PB_EventType_LeftClick)
Debug "#PB_EventType_LeftDoubleClick: " + Bool(eType & #PB_EventType_LeftDoubleClick = #PB_EventType_LeftDoubleClick)
Debug "------------------"
Debugger hat geschrieben:eType = #PB_EventType_LeftClick
#PB_EventType_LeftClick: 1
#PB_EventType_LeftDoubleClick: 0
------------------
eType = #PB_EventType_LeftDoubleClick
#PB_EventType_LeftClick: 1 <--- gibt 1 aus. sollte 0 sein.
#PB_EventType_LeftDoubleClick: 1
------------------
eType = #PB_EventType_LeftClick | #PB_EventType_LeftDoubleClick
#PB_EventType_LeftClick: 1
#PB_EventType_LeftDoubleClick: 1
------------------
Danke im Voraus & Grüße ... Peter

__________________________________________________
Thread verschoben
Anfänger>Spiderbasic
13.05.2017
RSBasic

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 12.05.2017 13:03
von Bisonte
Das Problem an der Sache ist, das die EventTypes so nicht kombinierbar sind.
LeftClick ist 0 und wenn 0 irgendwo dazukommt, ändert sich ja nichts.

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 12.05.2017 13:17
von RSBasic
Am besten konvertierst du die Konstanten in eigene Konstanten mit anderen Werten (1, 2, 4, 8, 16, ...), dann kannst du besser abfragen.

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 13.05.2017 11:33
von Kiffi
@Bisonte & RSBasic: Danke für Eure Rückmeldungen!

Tja, schade, kann man nix machen.

Ich hatte gehofft, dass ich etwas übersehen hätte. Eigene Konstanten kann ich leider nicht nehmen. Das müssen die originalen sein. Zu ärgerlich, dass ausgerechnet LeftClick den Wert 0 hat.

Grüße ... Peter

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 13.05.2017 15:17
von GPI
was genau hast du vor? Du kannst auch nicht einfach irgendwas kombinieren. Wenn du bspw folgende Konstanten hast

Code: Alles auswählen

#a=1
#b=2
#c=3
dann würde folgendes

Code: Alles auswählen

bool  ((#a+#b)&#c=#c)
Wahr ergeben!

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 13.05.2017 15:48
von DarkDragon
Kiffi hat geschrieben:Ich hatte gehofft, dass ich etwas übersehen hätte. Eigene Konstanten kann ich leider nicht nehmen. Das müssen die originalen sein.
Woher bekommst du denn den Wert, den du überprüfen willst?

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 13.05.2017 15:57
von Kiffi
GPI hat geschrieben:was genau hast du vor?
wie im Eingangsposting geschrieben: Ich möchte PB_EventType - Konstanten verodern (um sie dann an eine Procedure zu übergeben).

Hintergrund ist, dass ich für SpiderBasic User-Gadgets erstelle. Diese sollen dann mit einer eigenen BindGadgetEvent() - Funktion versehen werden.

Pseudo-Code:

Code: Alles auswählen

BlaBlaGadget(myGadget, x, y, w, h, ...)
BindGadgetEventEx(myGadget, @myCallback(), #PB_EventType_LeftDoubleClick)
in BindGadgetEventEx() muss ich die übergebenen PB_EventType-Konstanten auswerten. Und da ist #PB_EventType_LeftClick wg. der 0 immer gesetzt.

Grüße ... Peter

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 13.05.2017 16:01
von RSBasic
Du kannst auch in der Ziel-Prozedur per BindGadgetEvent() auf EventType() zugreifen und musst nichts übergeben.

\\Edit:
BindGadgetEvent() hat geschrieben:Die regulären Funktionen wie EventGadget(), EventWindow(), EventMenu(), EventType() und EventData() sind innerhalb des Callbacks verfügbar, um weitere Informationen über das Ereignis zu erhalten.

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 13.05.2017 16:21
von mk-soft
Vielleicht den Eventtype auf eine eigenen Type wandeln...

Code: Alles auswählen

#My_EventType_LeftClick = #PB_EventType_FirstCustomValue

Procedure GlobalEventHandler()
  Select Event()
    Case #PB_Event_Gadget
      Select EventType() 
        Case #PB_EventType_LeftClick
          PostEvent(#PB_Event_Gadget, #Null, EventGadget(), #My_EventType_LeftClick)
      EndSelect
      
  EndSelect
EndProcedure

Procedure EventGadgetHander()
  Select EventType()
    Case #My_EventType_LeftClick
      Debug "LeftClick"
    Case #PB_EventType_RightClick
      Debug "RightClick"
      
  EndSelect
EndProcedure

Procedure Main()
  If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 100, "Test Event´s", #PB_Window_SystemMenu)
    ButtonGadget(0, 5, 5, 120, 25, "Test Event")
    ListViewGadget(1, 5, 40, 120, 25)
    ; Bind
    BindEvent(#PB_Event_Gadget, @GlobalEventHandler())
    BindGadgetEvent(0, @EventGadgetHander())
    BindGadgetEvent(1, @EventGadgetHander())
    ; Mainloop
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
      EndSelect
    ForEver
  EndIf
EndProcedure : Main()

Re: Problem beim Auslesen ver-oder-ter Werte

Verfasst: 13.05.2017 16:26
von RSBasic
mk-soft hat geschrieben:Vielleicht den Eventtype auf eine eigenen Type wandeln...
Kiffi hat geschrieben:Eigene Konstanten kann ich leider nicht nehmen.