Page 1 sur 1

Nombre à virgule dans un StringGadget

Publié : mer. 13/avr./2005 9:16
par gansta93
Bonjour,

Il serait bien que l'on puisse entrer des nombres à virgule dans un stringGadget avec le flag #PB_String_ReadOnly.
Si c'est faisable, comment on fait ?

Publié : mer. 13/avr./2005 10:55
par Le Soldat Inconnu
euh, avec l'option #PB_String_Numeric tu veux dire :wink:

le signe - serait également appréciable si c'est faisable

Publié : mer. 13/avr./2005 21:33
par gansta93
Oui DSL, je voulais bien parler de #PB_String_Numeric. Le signe qui serait bien serait le point pour pouvoir être réutilisé correctement avec des variables.

Publié : jeu. 14/avr./2005 12:28
par Patrick88
gansta93 a écrit :Oui DSL, je voulais bien parler de #PB_String_Numeric. Le signe qui serait bien serait le point pour pouvoir être réutilisé correctement avec des variables.
le point ou la virgule dépende du paramétrage de ton windows....

patrick

Publié : jeu. 14/avr./2005 12:43
par gansta93
J'ai essayé de saisire un nombre en mettant une virgule puis un point, rien ne marche.

Publié : jeu. 14/avr./2005 17:27
par nico
J'ai regardé dans les api et j'ai l'impression que c'est prévu fonctionner comme ça.

J'ai donc fait ce petit code:
Je l'ai codé de manière qu'il ne soit pas possible d'afficher deux fois la virgule et que le premier caractère ne puisse pas être une virgule. Une autre condition empêche la "," de s'afficher si on appuie sur cette touche lors d'une sélection du contenu avec la souris.

Code : Tout sélectionner

If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))

  StringGadget(1,8, 35,306,20,"1234567",#PB_String_Numeric)
  ButtonGadget(2,8,100,306,20,"Voir le contenu")

  Repeat 
    EventID = WaitWindowEvent() 
    Select EventID  
      Case #WM_KEYDOWN 
        If GetFocus_()=GadgetID(1)
          If EventwParam()=$6E
            Texte$ = GetGadgetText(1) 
            If Texte$<>""
              If FindString(Texte$, ",", 1)=0
                SetClipboardText(","); le point ne se voit pas beaucoup, alors je met une ","
                SendMessage_(GadgetID(1),#wm_paste,0,0)
                If Len(GetGadgetText(1))=1
                  SetGadgetText(1,"")
                EndIf 
              EndIf
            EndIf 
          EndIf 
        EndIf   
        
      Case  #PB_EventGadget 
        Select EventGadgetID() 
          Case 2
            Texte$=GetGadgetText(1)
            Debug Texte$
            String$ = ReplaceString(Texte$, ",", "." , 1 ) 
            Debug String$
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit=1
    EndSelect
  Until Quit = 1
EndIf

Publié : jeu. 14/avr./2005 18:08
par nico
Un exemple plus adapté:

Code : Tout sélectionner

Procedure test(index.l)
  If EventwParam()=$6E
    Texte$ = GetGadgetText(index) 
    If Texte$<>""
      If FindString(Texte$, ",", 1)=0
        SetClipboardText(","); le point ne se voit pas beaucoup, alors je met une ","
        SendMessage_(GadgetID(index),#wm_paste,0,0)
        If Len(GetGadgetText(index))=1
          SetGadgetText(index,"")
        EndIf 
      EndIf
    EndIf 
  EndIf 
EndProcedure 

If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))
  StringGadget(0,8, 5,306,20,"",#PB_String_Numeric)
  StringGadget(1,8, 55,306,20,"",#PB_String_Numeric)
  StringGadget(2,8, 105,306,20,"",#PB_String_ReadOnly )
  ButtonGadget(3,8,160,306,20,"Voir le résultat de l'addition")
  TextGadget(4,8,35,306,20,"+",#PB_Text_Center)
  TextGadget(5,8,135,306,20,"=",#PB_Text_Center)
  
  Repeat 
    EventID = WaitWindowEvent() 
    Select EventID  
      Case #WM_KEYDOWN
        Select GetFocus_()
          Case GadgetID(0)
            test(0)
          Case GadgetID(1)
            test(1)
        EndSelect    
        
      Case  #PB_EventGadget 
        Select EventGadgetID() 
          Case 3
            Texte1$=GetGadgetText(0)
            Texte2$=GetGadgetText(1)
            Texte1$ = ReplaceString(Texte1$, ",", "." , 1 )
            Texte2$ = ReplaceString(Texte2$, ",", "." , 1 )
            number1.f=ValF(Texte1$)
            number2.f=ValF(Texte2$) 
            total$=StrF(number1+number2)
            SetGadgetText(2,total$)
        EndSelect
        
      Case #PB_Event_CloseWindow
        Quit=1
    EndSelect
  Until Quit = 1
EndIf

Publié : ven. 15/avr./2005 11:22
par Le Soldat Inconnu
extra ce petit code :D

Publié : ven. 15/avr./2005 19:32
par gansta93
Cool ! :-D
Merci.