Nombre à virgule dans un StringGadget

Vous avez une idée pour améliorer ou modifier PureBasic ? N'hésitez pas à la proposer.
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Nombre à virgule dans un StringGadget

Message 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 ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message 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.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message 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
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

J'ai essayé de saisire un nombre en mettant une virgule puis un point, rien ne marche.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message 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
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

extra ce petit code :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
gansta93
Messages : 1448
Inscription : jeu. 26/févr./2004 11:17
Localisation : Le Village
Contact :

Message par gansta93 »

Cool ! :-D
Merci.
Répondre