Seite 1 von 1

Eventabarbeitung

Verfasst: 09.11.2013 18:19
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!

Re: Eventabarbeitung

Verfasst: 09.11.2013 18:28
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

Re: Eventabarbeitung

Verfasst: 09.11.2013 19:19
von ProgOldie
Ja, das war's danke.
Die Gadgetnummer ist - unabhängig vom Fenster -für jedes Gadget kennzeichnend.