Problem beim Auslesen ver-oder-ter Werte

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Problem beim Auslesen ver-oder-ter Werte

Beitrag 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
Hygge
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag 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.
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag von RSBasic »

Am besten konvertierst du die Konstanten in eigene Konstanten mit anderen Werten (1, 2, 4, 8, 16, ...), dann kannst du besser abfragen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag 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
Hygge
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag 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!
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag 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?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag 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
Hygge
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag 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()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Problem beim Auslesen ver-oder-ter Werte

Beitrag von RSBasic »

mk-soft hat geschrieben:Vielleicht den Eventtype auf eine eigenen Type wandeln...
Kiffi hat geschrieben:Eigene Konstanten kann ich leider nicht nehmen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten