Seite 1 von 1

#PB_Event_ActivateWindow + EventWindow() + SetActiveGadget()

Verfasst: 09.09.2007 19:09
von marco2007
Hi!

Ich habe mal wieder ein Problem mit dem EventHandling....
Ich möchte, daß ein bestimmtes Gadget den Fokus erhält, sobald ein bestimmtes Fenster den Fokus erhält...

Code: Alles auswählen

Enumeration
  #Window_1
  #Window_2
EndEnumeration

Enumeration
  #String_1
  #String_2
EndEnumeration


Procedure Open_Window_1()
  If OpenWindow(#Window_1, 300, 200, 130, 60, "1. Fenster",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      StringGadget(#String_1, 20, 20, 90, 25, "")
      
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_2()
  If OpenWindow(#Window_2, 300, 350, 130, 60, "2. Fenster",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_2))
      StringGadget(#String_2, 20, 20, 90, 25, "")
      
    EndIf
  EndIf
EndProcedure

Open_Window_1()
Open_Window_2() 

Repeat
event=WaitWindowEvent()

Select Event
        Case #PB_Event_ActivateWindow
         Select EventWindow() 
         Case #Window_1
         Debug "Window 1"
         SetActiveGadget(#String_1)
         Case #Window_2
         Debug "Window 2"
         ;SetActiveGadget(#String_2) <- sobald diese Zeile "scharf" ist, funkt es nicht mehr :-(
         EndSelect
  EndSelect   
Until event=#PB_Event_CloseWindow


Sobald ich "Setactivegadget" bei einem der zwei Fälle weglasse, funkt es... Hat jemand eine Lösung?

Danke
Marco

Verfasst: 09.09.2007 21:09
von Franky
Hi Marco,
Das Problem scheint zu sein, dass bei SetActiveGadget auch das Fenster nochmal auf aktiv gesetzt wird.

Hier mal ein kleines Workaround: Einfach abfragen, ob das Fenster vorher nicht aktiv war und nur dann aktivieren.

Wenn in die Fenster noch mehr rein soll, kannste die abfrage ja noch um GetActiveGadget() erweitern.

Code: Alles auswählen

Enumeration
  #Window_1
  #Window_2
EndEnumeration

Enumeration
  #String_1
  #String_2
EndEnumeration


Procedure Open_Window_1()
  If OpenWindow(#Window_1, 300, 200, 130, 60, "1. Fenster",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_1))
      StringGadget(#String_1, 20, 20, 90, 25, "")
     
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_2()
  If OpenWindow(#Window_2, 300, 350, 130, 60, "2. Fenster",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_2))
      StringGadget(#String_2, 20, 20, 90, 25, "")
     
    EndIf
  EndIf
EndProcedure

Open_Window_1()
Open_Window_2()
altaktiv=0
Repeat
event=WaitWindowEvent()

Select Event
        Case #PB_Event_ActivateWindow
         Select EventWindow()
         Case #Window_1
           If altaktiv<>#Window_1
                  SetActiveGadget(#String_1)
                  altaktiv=#Window_1
           EndIf
         Case #Window_2
           If altaktiv<>#Window_2
                  SetActiveGadget(#String_2)
                  altaktiv=#Window_2
           EndIf
         EndSelect
  EndSelect   
Until event=#PB_Event_CloseWindow

Verfasst: 10.09.2007 22:04
von marco2007
Danke, Franky!
Das Problem scheint zu sein, dass bei SetActiveGadget auch das Fenster nochmal auf aktiv gesetzt wird.


...d.h. der Code sollte normalerweise auch ohne Workaround funktionieren, oder?