Eventabarbeitung

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Eventabarbeitung

Beitrag von ProgOldie »

Ich brüte schon seit Stunden über einem offenbar simplen Fehler, den ich aber nicht finde.
Ich habe ein Fenster 'DataWin', in dem verschiedene Gadgets sind. In will nun abfragen, ob bei einem dieser Gadgets in genau diesem Fenster ein Ereignis stattfand und will dieses in getValue() auswerten. getValue() darf aber nur aufgerufen werden, wenn in genau diesem Fenster ein GadgetEvent stattfand. Wenn nicht, wird das Event an anderer Stelle abgefangen bzw. soll gefragt werden, ob das Ereignis z.B. im Fenster MainWin stattfand.

Code: Alles auswählen

Repeat
  Event=WaitWindowEvent(10)
  If Event
    EventWin=EventWindow()
    Select EventWin
      Case  DataWin
        Select Event
          Case #PB_Event_Gadget
            EvGadget=EventGadget()
            EvType=EventType()
            getValue(EvGadget,EvType,F())
        EndSelect
      ;Case MainWin......
    EndSelect  
  EndIf
Until Event = #PB_Event_CloseWindow And EventWin=DataWin
Es ergibt sich 'EvGadget'= -1 und EvType=1024, obwohl kein Gadget in DataWin angeklickt ist.
Was ist an der Programmlogik falsch?

Dank vorab!
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Eventabarbeitung

Beitrag von RSBasic »

Die zusätzliche Window-Abfrage, in welchem Fenster ein Event stattfand, brauchst du eigentlich garnicht.
Die Events für die Gadgets auf "DataWin"-Fenster werden nur dann ausgelöst, wenn du dich auch in diesem Fenster befindest. D.h. wenn du im anderen Fenster was klickst, dann werden die anderen Events nicht ausgelöst.
Beispiel:

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0, 0, 0, 500, 400, "Window 1", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(1, 10, 10, 100, 20, "Button 1", 0)
  
  If OpenWindow(1, 0, 0, 300, 200, "Window 2", #PB_Window_SystemMenu | #PB_Window_WindowCentered, WindowID(0))
    ButtonGadget(2, 10, 10, 100, 20, "Button 2", 0)
  EndIf
  
  Repeat
    EventID = WaitWindowEvent()
    If EventID = #PB_Event_Gadget
      Select EventGadget()
        Case 1
          Debug "Button 1 im 1. Fenster"
        Case 2
          Debug "Button 2 im 2. Fenster"
      EndSelect
    EndIf
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ProgOldie
Beiträge: 236
Registriert: 19.05.2012 17:09
Computerausstattung: Windows11, Arduinos, Pi3, PureBasic 6.02

Re: Eventabarbeitung

Beitrag von ProgOldie »

Ja, das war's danke.
Die Gadgetnummer ist - unabhängig vom Fenster -für jedes Gadget kennzeichnend.
Windows10 / PB5.70 / Arduino (-Due) / Raspberry Pi3 /Linux Mint 18
Antworten