5.21: SetActiveGadget und #PB_EventType_Focus

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

5.21: SetActiveGadget und #PB_EventType_Focus

Beitrag 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.
Bild
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Beitrag 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
(\/) (°,,,°) (\/)
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Beitrag 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
Hygge
ThoPie
Beiträge: 130
Registriert: 19.05.2006 15:18
Kontaktdaten:

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Beitrag von ThoPie »

Vielen Dank für eure Informationen. Da muss ich das Programm umstricken.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 5.21: SetActiveGadget und #PB_EventType_Focus

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten