Page 1 sur 1

Entrez une valeur numérique bornée avec souplesse

Publié : ven. 14/mai/2004 17:54
par Le Soldat Inconnu
Salut,

un petit code bien pratique qui permet ceci de faire une requête sur une valeur numérique comprise entre 2 valeurs en laissant le temps à l'utilisateur de finir de taper le nombre avant de le corriger.
Par exemple, on souhaite un nombre compris entre 1000 et 10000, le nombre par défaut est 5000, si l'utilisateur efface un 0, on se retrouve avec 500 qui n'est pas une valeur correcte.
Si on change la valeur directement, on empêche l'utilisateur de taper la valeur qu'il souhaitait.
Mon astuce permet de changer la valeur seulement au bout d'un certain temps pour que l'utilisateur puisse finir de taper la valeur.

Code : Tout sélectionner

; Auteur : Le Soldat Inconnu
; Version de PB : 3.81
; 
; Explication du programme :
; Faire une requête sur une valeur numérique comprise entre 2 valeurs en laissant le temps à l'utilisateur de finir de taper le nombre avant de le corriger.
; Par exemple, on souhaite un nombre compris entre 1000 et 10000, le nombre par défaut est 5000, si l'utilisateur efface un 0, on se retrouve avec 500 qui n'est pas une valeur correcte.
; Si on change la valeur directement, on empêche l'utilisateur de taper la valeur qu'il souhaitait.
; Mon astuce permet de changer la valeur seulement au bout d'un certain temps pour que l'utilisateur puisse finir de taper la valeur.


Enumeration
  #String
  #Texte
EndEnumeration


Procedure ChangeValeur(Valeur)
  Delay(2000) ; On attend 2 secondes
  
  If Valeur = Val(GetGadgetText(#String)) ; On regarde le contenu du StringGadget n'a pas changer
    
    Valeur = Val(GetGadgetText(#String)) ; On enregistre le contenu
    
    ; On corrige le contenu
    If Valeur < 1000
      SetGadgetText(#String, "1000")
    ElseIf Valeur > 10000
      SetGadgetText(#String, "10000")
    EndIf
  
  EndIf
EndProcedure


; Création de la fenêtre et dela GadgetList
If OpenWindow(0, 0, 0, 300, 100, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Test") = 0 Or CreateGadgetList(WindowID()) = 0
  End
EndIf

; On affiche les gadgets
TextGadget(#Texte, 5, 5, 290, 15, "Entrez un nombre compris entre 1000 et 10000 :")
StringGadget(#String, 5, 20, 290, 20, "5000", #PB_String_Numeric)
Nombre = 5000

; Boucle d'évènements
Repeat
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    Select EventGadgetID() ; boutons, zone de texte, ...
      Case #String
        If Nombre <> Val(GetGadgetText(#String)) ; Si le contenu du StringGadget à changer
          Nombre = Val(GetGadgetText(#String)) ; On enregistre la nouvelle valeur
          
          If Nombre < 1000 ; si la valeur est inférieure à la limite
            CreateThread(@ChangeValeur(), Nombre) ; on lance un thread qui vérifiera le texte au bout de 2 secondes
            Nombre = 1000 ; on change la valeur
            
          ElseIf Nombre > 10000 ; si la valeur est supérieure à la limite
            CreateThread(@ChangeValeur(), Nombre) ; on lance un thread qui vérifiera le texte au bout de 2 secondes
            Nombre = 10000 ; on change la valeur
            
          EndIf
          
        EndIf
        
    EndSelect
  EndIf
  
Until Event = #PB_EventCloseWindow

End