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