StringGadget OnFocus (boucle infini)

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

StringGadget OnFocus (boucle infini)

Message par Shinao »

Bonsoir,

J'ai un StringGadget qui, en cliquant dessus, ouvre un PathRequester, hors dès qu'il clique sur un bouton, il a toujours le focus, donc il boucle continuellement dessus.

Code : Tout sélectionner

#InputPath = 1
#window = 0

requesterEntered.i = 0

OpenWindow(#window, 100, 200, 300, 30, "PureBasic - Requesters example")



StringGadget(#InputPath, 10, 2, 100, 25, "")

Repeat
  Event = WaitWindowEvent()
  
  Select Event
      
    Case #PB_Event_Gadget

      Select EventGadget()
          
        Case #InputPath
          Select EventType()
            Case #PB_EventType_Focus
              
              If(requesterEntered.i = 0)
                Path$ = PathRequester("Chemin des sources applicatifs","")
                requesterEntered.i = 1
                If Path$
                  SetGadgetText(#InputPath, Path$)
                EndIf
               EndIf
           EndSelect
          
      EndSelect
            
  EndSelect
Until Event = #PB_Event_CloseWindow
J'ai résolu le problème en mettant une variable pour savoir si il est déjà rentré dedans ou non, sauf que si je reclique dessus çe ne fonctionne pas puisqu'il n'y a aucun moyen de remettre ma variable à 1 car on ne peut connaitre le moment ou il est défocus...

Donc en faite le problème c'est qu'il existe une methode SetActiveGadget() mais pas une SetInnactiveGadget()...

Quelqu'un à une solution ?

Merci d'avance
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: StringGadget OnFocus (boucle infini)

Message par falsam »

Le string caché

Code : Tout sélectionner

Enumeration
  #window
  #InputPath 
  #Dummy ;le string caché
EndEnumeration


Global requesterEntered.i = 0, event.l, Path$

OpenWindow(#window, 100, 200, 300, 30, "PureBasic - Requesters example")
StringGadget(#Dummy,0,0,0,0,"")
StringGadget(#InputPath, 10, 2, 100, 25, "")


Repeat
  Event = WaitWindowEvent(10)
  
  Select Event
     
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #dummy
          requesterEntered=0
          
        Case #InputPath
          Select EventType()            
            Case #PB_EventType_Focus
              If requesterEntered=0
                Path$ = PathRequester("Chemin des sources applicatifs","")
                If Path$
                 SetGadgetText(#InputPath, Path$)  
                EndIf 
              EndIf
            
              
            Case #PB_EventType_LostFocus
              SetActiveGadget(#Dummy)
              requesterEntered=1
              
           EndSelect
          
      EndSelect
            
  EndSelect
Until Event = #PB_Event_CloseWindow
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Re: StringGadget OnFocus (boucle infini)

Message par Shinao »

Voilà donc le tour que je devais employer...

Merci pour ta réponse !
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: StringGadget OnFocus (boucle infini)

Message par Mesa »

Une variante du code de falsam est de remplacer

Code : Tout sélectionner

StringGadget(#Dummy,0,0,0,0,"")
par

Code : Tout sélectionner

ButtonGadget(#Dummy,116,2,30,25,"ok");
Le focus est déplacer sur le bouton.

Mesa.
Shinao
Messages : 137
Inscription : dim. 21/sept./2008 13:00

Re: StringGadget OnFocus (boucle infini)

Message par Shinao »

Pourquoi remplacer l'input par un button ?
Répondre