Page 1 sur 1

StringGadget entrer uniquement des chiffres, mais décimaux

Publié : dim. 04/juil./2010 16:31
par MLD
Salut a tous

L'option #PB_String_Numéric ne permet pas l'écriture de nombres décimaux.
Pourtant il est parfois nécéssaire dans un stringGadget d'écrire uniquement des chiffres, mais décimaux
Voici une solution. Si il y a plus court je suis preneur. :lol:

Code : Tout sélectionner

;MLD le 4/7/2010 Entrer dans un StringGaget uniquement des chiffres , mais décimaux
Procedure String_NumericD(Gadget)   
If Len(GetGadgetText(Gadget)) <>0 
 SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)     
  a$ = Mid(GetGadgetText(Gadget),Debut_position,1)
   ValeurASCII = Asc(a$) 
    If ValeurASCII = 46
     Else
     If ValeurASCII <48 Or ValeurASCII > 57  
      y = Debut_Position
      Texte.s = GetGadgetText(Gadget)
      x = Len(Texte)
      If Mid(Texte,y,1) = "," ; modification d'une virgule en point
       Texte2.s = Left(Texte,y -1) + "." + Right(Texte,x-y)
       SetGadgetText(Gadget,Texte2)
       SendMessage_(GadgetID(Gadget), #EM_SETSEL, x + 1, x + 1) 
      Else
       Texte2.s = Left(Texte,y -1) + Right(Texte,x-y)
       SetGadgetText(Gadget,Texte2)
       SendMessage_(GadgetID(Gadget), #EM_SETSEL, x-1, x-1)    
    EndIf 
  EndIf
 EndIf 
EndIf 
EndProcedure

OpenWindow(1 , 0, 0, 300, 145,  "") 
StringGadget(2,100, 50, 90, 20, "",#ES_CENTER )
SetActiveGadget(2) 
Repeat
Event = WaitWindowEvent()
 Select EventGadget()
  Case 2
  String_NumericD(2) 
 EndSelect 
Until event = #PB_Event_CloseWindow 
End
Michel

Re: StringGadget entrer uniquement des chiffres, mais décima

Publié : dim. 04/juil./2010 17:35
par kernadec
bonjour MLD
voila un post intéressant sur ce sujet : http://www.purebasic.fr/english/viewtop ... arseNumber

Cordialement

Re: StringGadget entrer uniquement des chiffres, mais décima

Publié : dim. 04/juil./2010 22:13
par PAPIPP
Bonjour MLD
VALD(xx) permet sans contrôle, de saisir tous les types numériques
Exemples 456.987 ou 0.2718E10 etc..

Code : Tout sélectionner

OpenWindow(1 , 0, 0, 300, 145,  "")
StringGadget(2,100, 50, 90, 20, "",#ES_CENTER )
ButtonGadget(3, 140, 100, 20, 20, "OK")
Repeat
  Event = WaitWindowEvent()
  eg=EventGadget()
Select EG
  Case 2
    Texte.s = GetGadgetText(2)
  Case 3  
    Debug ValD(texte) ;permet de saisir tous les types de numériques 456.78 ou 0.45657E45 sans contrôle
    SetActiveGadget(2)
EndSelect
Until event = #PB_Event_CloseWindow
End
A+

Re: StringGadget entrer uniquement des chiffres, mais décima

Publié : lun. 05/juil./2010 7:37
par MLD
Bonjour PAPPIP
Là n'est pas la question :|
Il s'agit de pouvoir saisir a la volée que des chiffres avec éventuellement un point, ou virgule. Toute autres lettres ou signes étant proscrits :wink: comme #PB_String_Numéric mais avec décimaux, et avec la gestion du caret.



Merci a Kernadec

Code : Tout sélectionner

;MLD le 4/7/2010 Entrer dans un StringGaget uniquement des chiffres , mais décimaux
Procedure String_NumericD(Gadget)   
If Len(GetGadgetText(Gadget)) <>0 
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)     
  a$ = Mid(GetGadgetText(Gadget),Debut_position,1)
   ValeurASCII = Asc(a$) 
    If ValeurASCII = 46
     Else
     If ValeurASCII <48 Or ValeurASCII > 57  
      y = Debut_Position
      Texte.s = GetGadgetText(Gadget)
      x = Len(Texte)
      If Mid(Texte,y,1) = "," ; modification d'une virgule en point
       Texte2.s = Left(Texte,y -1) + "." + Right(Texte,x-y)
       SetGadgetText(Gadget,Texte2)
       SendMessage_(GadgetID(Gadget), #EM_SETSEL, x + 1, x + 1) 
      Else
       Texte2.s = Left(Texte,y -1) + Right(Texte,x-y)
       SetGadgetText(Gadget,Texte2)
       SendMessage_(GadgetID(Gadget), #EM_SETSEL, x-1, x-1)    
    EndIf 
  EndIf
EndIf 
EndIf 
EndProcedure

OpenWindow(1 , 0, 0, 300, 145,  "") 
StringGadget(2,100, 30, 90, 20, "",#ES_CENTER )
SetActiveGadget(2) 
TextGadget(3,95, 60, 200, 20,"avec #PB_String_Numeric")
StringGadget(4,100, 80, 90, 20, "",#ES_CENTER |#PB_String_Numeric)
Repeat
Event = WaitWindowEvent()
Select EventGadget()
  Case 2
  String_NumericD(2) 
EndSelect 
Until event = #PB_Event_CloseWindow 
End


Re: StringGadget entrer uniquement des chiffres, mais décima

Publié : lun. 05/juil./2010 9:14
par Cls
Pour vérifier qu'il s'agit bien d'un décimal, une expression régulière peut faire l'affaire :

Code : Tout sélectionner

CreateRegularExpression(0, "^\d+(\.\d+)?$")