Seite 1 von 1

5.21: SetActiveGadget und #PB_EventType_Focus

Verfasst: 03.12.2013 17:01
von ThoPie
Ich nutze in meinem Programm häufig SetActiveGadget() um zu einem Standardfeld zu springen. Bisher (bis Version 5.20?) wurde dabei das Ereignis #PB_EventType_Focus ausgelöst, jetzt aber nicht mehr. Ist dieses Verhalten so gewollt oder ein Bug?
Hier mal was zum testen:

Code: Alles auswählen

Enumeration
  #wndFenster
  #strString
EndEnumeration

Global ENDE.i

OpenWindow(#wndFenster,#PB_Ignore,#PB_Ignore,800,600,"Test",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
StringGadget(#strString,10,10,500,20,"")
Repeat
  ; sollte dies den Focus auslösen?
  SetActiveGadget(#strString)
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #strString
          Select EventType()  
            Case #PB_EventType_LostFocus
              Debug "Focus erhalten"  
            EndSelect
      EndSelect        
    Case #PB_Event_CloseWindow
      ENDE=1
  EndSelect
Until ENDE=1
Vielen Dank für eure Mühe.

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Verfasst: 03.12.2013 17:48
von KeyKon
Ich denke es ist gewollt. Mich hat immer gestört dass vom Programm ausgeführte Aktionen Events auslösen können, jetzt kann man wenn man will Events gezielt mit PostEvent() schicken, da ist es finde ich besser wenn keine anderen Befehle mehr Events auslösen.

LG KeyKon

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Verfasst: 03.12.2013 17:56
von Kiffi
ThoPie hat geschrieben:Ist dieses Verhalten so gewollt oder ein Bug?
auch wenn Dein Code-Beispiel etwas unglücklich gewählt wurde:
dieses Verhalten ist kein Bug, sondern von Fred zum PureBasic-Standard erklärt worden.

Grob gesagt: Jegliche Aktion, die von 'innen' (also von Deinem Code) ausgeführt
wird, erzeugt kein Event. Nur Benutzeraktionen (also der Anwender macht etwas
aktiv) erzeugen Events. Warum hier ein Unterschied gemacht wird, entzieht sich
meiner Logik, denn in beiden Fällen sollten meiner Meinung nach Focus/LostFocus
ausgelöst werden.

Das ist soweit ich weiß ein Verhalten, dass es nur in PureBasic gibt. Also einfach
im Hinterkopf behalten.

Grüße ... Kiffi

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Verfasst: 03.12.2013 20:04
von ThoPie
Vielen Dank für eure Informationen. Da muss ich das Programm umstricken.

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Verfasst: 03.12.2013 20:38
von ts-soft
ThoPie hat geschrieben:Vielen Dank für eure Informationen. Da muss ich das Programm umstricken.
Wenn es Deinem Beispiel ähnlich ist, dann wohl schon, weil sowas kann nicht funktionieren. Möglichst
niemals Code im EventLoop, ausserhalb der Ereignisabfrage!

Ansonsten brauchste in Deinem Programm nur hinter dem SetActiveGadget ein PostEvent anfügen.
Sollte ja nicht so aufwendig sein :wink: