Page 1 sur 1

StringGadget OnFocus (boucle infini)

Publié : ven. 01/juin/2012 23:15
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

Re: StringGadget OnFocus (boucle infini)

Publié : sam. 02/juin/2012 0:21
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

Re: StringGadget OnFocus (boucle infini)

Publié : sam. 02/juin/2012 1:39
par Shinao
Voilà donc le tour que je devais employer...

Merci pour ta réponse !

Re: StringGadget OnFocus (boucle infini)

Publié : sam. 02/juin/2012 9:21
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.

Re: StringGadget OnFocus (boucle infini)

Publié : dim. 03/juin/2012 19:10
par Shinao
Pourquoi remplacer l'input par un button ?