Saisie numérique dans un string gadget avec 1 à n décimales
Re: Saisie numérique dans un string gadget avec 1 à n décima
..........
Dernière modification par Backup le dim. 02/oct./2011 12:51, modifié 1 fois.
- falsam
- Messages : 7318
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Saisie numérique dans un string gadget avec 1 à n décima
Rhoooo Dobro, je pense que tu n'as pas pris la peine de lire mon post qui est certes trop longDobro a écrit :je t'avais donné le lien mais bon ...
Typhoon avait fait ça

Les include (Pbi) sont très pratiques et évitent ainsi d'alourdir un programme avec du code maintes fois testé.Dobro a écrit :pis bon arrete avec tes PBI
Justement Dobro, ce sont des procédures :pDobro a écrit :utilise les procedures comme ci dessus
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Saisie numérique dans un string gadget avec 1 à n décima
comprends pas l'intérêt !falsam a écrit :Les include (Pbi) sont très pratiques et évitent ainsi d'alourdir un programme avec du code maintes fois testé.Dobro a écrit :pis bon arrete avec tes PBI
autant utiliser une librairie dans ce cas ..
l'avantage , si tu n'utilise pas la fonction, elle n'est pas inclue !
pas forcement !falsam a écrit :Justement Dobro, ce sont des procédures :pDobro a écrit :utilise les procedures comme ci dessus
un pbi peut contenir du code autre que des procedures !!
des constantes par ex

Re: Saisie numérique dans un string gadget avec 1 à n décima
Pour le fun. Une autre façon de voir les choses

Code : Tout sélectionner
;********* MLD le 6/4/2011 *****************
Enumeration
#MainForm
#MntTtc
#MntHt
EndEnumeration
ind = 0 : text2$ = ""
Procedure affichemonetaire(montant.f)
text1$ = StrF(montant.f,2)
ReplaceString(text1$, ".", ",", #PB_String_InPlace, 1)
For x = Len(text1$) To 1 Step -1
ind = ind + 1
text2$ = text2$ + Mid(text1$,x,1)
If ind = 3
ind = 0
If Mid(text1$,x,1) <> ","
text2$ = text2$ + " "
EndIf
EndIf
Next
SetGadgetText(#MntTtc,ReverseString(text2$) + ".€")
EndProcedure
Procedure CalculTTC()
;Convertissons la chaîne en une valeur numérique de type Float.
MntHt.f=ValF(GetGadgetText(#MntHt))
MntTtc.f=MntHt*(1.196)
affichemonetaire(MntTtc.f)
EndProcedure
OpenWindow(#MainForm,0,0,400,150,"Saisie monétaire",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
TextGadget(#PB_Any,10,23,80,23,"Montant Ht")
StringGadget(#MntHt,100,20,80,23,"0.00",#ES_RIGHT)
TextGadget(#PB_Any,10,43,80,23,"Montant Ttc")
StringGadget(#MntTtc,100,40,80,23,"0.00 €",#PB_String_ReadOnly | #ES_RIGHT)
SetGadgetColor(#MntTtc,#PB_Gadget_BackColor,$F9F9F9)
TextGadget(#PB_Any,200,43,80,23,"Taux 19,60%")
SetActiveGadget(#MntHt)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget() = #MntHt
Select EventType()
Case #PB_EventType_LostFocus
;Calcul de du montant Ttc
CalculTTC()
EndSelect
EndIf
EndSelect
ForEver
- falsam
- Messages : 7318
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Saisie numérique dans un string gadget avec 1 à n décima
Hummmmmm non
pas assez fun. Je préfère mon include certes plus long, mais qui permet de ne pas saisir deux fois la virgule par exemple.

Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Saisie numérique dans un string gadget avec 1 à n décima
falsam a écrit :Hummmmmm nonpas assez fun. Je préfère mon include certes plus long, mais qui permet de ne pas saisir deux fois la virgule par exemple.

Heu!. ou faut'il saisir deux fois la virgule


- falsam
- Messages : 7318
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Saisie numérique dans un string gadget avec 1 à n décima
L'exemple que tu donnes permet de saisir des caractères alphanumériques.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Saisie numérique dans un string gadget avec 1 à n décima
Salutfalsam a écrit :L'exemple que tu donnes permet de saisir des caractères alphanumériques.
Exact. c'est pour transformer un chiffre en présentation monétaire.
Sinon, pour saisir uniquement des chiffres avec décimales dans un StringGadget, j'ai mis ceci sur le forum il y a déja quelques temps.

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
- falsam
- Messages : 7318
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Saisie numérique dans un string gadget avec 1 à n décima
C'est mieux, mais le risque de saisir plus d'une fois le séparateur décimal est possible ce qui provoquera des erreurs de calcul.
Télécharge cette démo et tu verras la différence.
Télécharge cette démo et tu verras la différence.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Saisie numérique dans un string gadget avec 1 à n décima
Ok .Il ne faut pas prendre les opérateurs pour des demeurés. Avec ton code quand je tape une virgule, elle n'est pas transformée en point, et le calcul est faux.
Alors un point partout, la balle au centre.
En ce moment le temps me manque, mais je te proposerait une solution.
Bonne journée
Michel
Alors un point partout, la balle au centre.

En ce moment le temps me manque, mais je te proposerait une solution.

Bonne journée
Michel
- falsam
- Messages : 7318
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Saisie numérique dans un string gadget avec 1 à n décima
Sans les prendre pour des demeurés, le doigt est parfois lourd sur le clavier et certains oublient d'enlever les moufles :pMLD a écrit :Ok .Il ne faut pas prendre les opérateurs pour des demeurés.
A bientôt.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Saisie numérique dans un string gadget avec 1 à n décima
Salut falsam
j'ai fait quelques modifs a mon code. en principe c'est ok
Nombre de chiffres aprés le point illimité a la saisie, selon le choix. Point ou virgule pris en compte.
Bon W.E
Michel
j'ai fait quelques modifs a mon code. en principe c'est ok

Code : Tout sélectionner
;********* MLD le 9/4/2011 *****************
Enumeration
#MainForm
#MntTtc
#MntHt
EndEnumeration
ind = 0 : text2$ = ""
Procedure String_NumericD(Gadget,NbDecim); Nombre de chiffre aprés la virgule
If Len(GetGadgetText(Gadget)) <>0
SendMessage_(GadgetID(Gadget), #EM_GETSEL, @Debut_Position, @Fin_position)
Texte.s = GetGadgetText(Gadget)
x = Len(Texte)
If Mid(Texte.s,Len(Texte.s)-(NbDecim + 1),1) ="." ;limite les décimales
SetGadgetText(Gadget,Left(Texte,x-1))
SendMessage_(GadgetID(Gadget), #EM_SETSEL, x-1, x-1)
ProcedureReturn #NUL
EndIf
a$ = Mid(GetGadgetText(Gadget),Debut_position,1)
ValeurASCII = Asc(a$)
If ValeurASCII = 46 Or ValeurASCII = 44 ;interdit deux points
xz = Len(Texte)
placepoint = FindString(Left(Texte,xz-1),".",1)
If placepoint <> 0 And Len(Texte) <> placepoint And Mid(Texte,Len(Texte),1) = "."
SetGadgetText(Gadget,Left(Texte,xz-1))
SendMessage_(GadgetID(Gadget), #EM_SETSEL, xz-1, xz-1)
EndIf
EndIf
If ValeurASCII = 46
Else
If ValeurASCII <48 Or ValeurASCII > 57
y = Debut_Position
Texte.s = GetGadgetText(Gadget)
xx = Len(Texte)
If Mid(Texte,y,1) = "," ; modification d'une virgule en point
Texte2.s = Left(Texte,y -1) + "."
SetGadgetText(Gadget,Texte2)
SendMessage_(GadgetID(Gadget), #EM_SETSEL, xx + 1, xx + 1)
Else
SetGadgetText(Gadget,Left(Texte,y -1))
SendMessage_(GadgetID(Gadget), #EM_SETSEL, xx-1, xx-1)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure affichemonetaire(montant.f);affichage en format monétaire
text1$ = StrF(montant.f,2)
ReplaceString(text1$, ".", ",", #PB_String_InPlace, 1)
For x = Len(text1$) To 1 Step -1
ind = ind + 1
text2$ = text2$ + Mid(text1$,x,1)
If ind = 3
ind = 0
If Mid(text1$,x,1) <> ","
text2$ = text2$ + " "
EndIf
EndIf
Next
SetGadgetText(#MntTtc,ReverseString(text2$) + ".€")
EndProcedure
Procedure CalculTTC()
;Convertissons la chaîne en une valeur numérique de type Float.
MntHt.f=ValF(GetGadgetText(#MntHt))
MntTtc.f=MntHt*(1.196)
affichemonetaire(MntTtc.f)
EndProcedure
OpenWindow(#MainForm,0,0,400,150,"Saisie monétaire",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
TextGadget(#PB_Any,10,23,80,23,"Montant Ht")
StringGadget(#MntHt,100,20,80,23,"0.00",#ES_RIGHT)
TextGadget(#PB_Any,10,43,80,23,"Montant Ttc")
StringGadget(#MntTtc,100,40,80,23,"0.00 €",#PB_String_ReadOnly | #ES_RIGHT)
SetGadgetColor(#MntTtc,#PB_Gadget_BackColor,$F9F9F9)
TextGadget(#PB_Any,200,43,80,23,"Taux 19,60%")
SetActiveGadget(#MntHt)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget() = #MntHt
String_NumericD(2,2)
Select EventType()
Case #PB_EventType_LostFocus
;Calcul de du montant Ttc
CalculTTC()
EndSelect
EndIf
EndSelect
ForEver
Bon W.E

Michel
Re: Saisie numérique dans un string gadget avec 1 à n décima
Bonne, et intéressante collaboration... J'ajoute ma très très petite pierre à l''édifice... Par :
Cela n'ajoute rien de plus que de pouvoir entrer le Taux de TVA...
Et de montrer comment utiliser étendre votre code !!!
Merci
Code : Tout sélectionner
; -------------------------------------------------
IncludeFile "StrMaskDec.pbi"
Global TTva.f ; <================ Pour commencer !
Enumeration
#MainForm
#MntHt
#TauxTVA ; <====================== ICI
#MntTtc
EndEnumeration
Procedure CalculTTC()
;Convertissons la chaîne en une valeur numérique de type Float.
;Ici nous utilisons la fonction StrToNumStr pour nous debarasser du format d'edition
MntHt.f=ValF(StrToNumStr(GetGadgetText(#MntHt)))
MntTtc.f=MntHt+(MntHt*TTva/100) ; < ========================== ICI Aussi
SetGadgetText(#MntTtc,StrFormat(StrF(MntTtc,2),"### ###.## €"))
EndProcedure
Procedure MainFormShow()
If OpenWindow(#MainForm,0,0,400,150,"Saisie monétaire",#PB_Window_ScreenCentered |#PB_Window_SizeGadget | #PB_Window_SystemMenu)
;
TextGadget(#PB_Any,10,23,80,23,"Montant Ht")
StringGadget(#MntHt,100,20,80,23,"0.00",#ES_RIGHT)
;
TextGadget(#PB_Any,10,46,80,23,"Taux Tva :") ; <====== Là
StringGadget(#TauxTVA,100,43,80,23,"0.00",#ES_RIGHT) ; <====== Et Là
;
SetGadgetColor(#TauxTVA,#PB_Gadget_BackColor,$F9F9F9)
TextGadget(#PB_Any,10,69,80,23,"Montant Ttc")
;
StringGadget(#MntTtc,100,66,80,23,"0.00 €",#PB_String_ReadOnly | #ES_RIGHT)
SetGadgetColor(#MntTtc,#PB_Gadget_BackColor,$F9F9F9)
;
SetActiveGadget(#MntHt)
EndIf
EndProcedure
MainFormShow()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget() = #MntHt
; C'est ici qu'on applique le format d'edition
StrMaskDec(#MntHt,5,2,"### ###.## €")
ElseIf EventGadget() = #TauxTVA ; <======== ET enfin
StrMaskDec(#TauxTVA,3,2,"###.## %") ; <========
Select EventType()
Case #PB_EventType_LostFocus
; Calcul de du montant Ttc
TTva=ValF(StrToNumStr(GetGadgetText(#TauxTVA))) ; ; <========
CalculTTC()
EndSelect
EndIf
EndSelect
ForEver
Et de montrer comment utiliser étendre votre code !!!

Merci

Windows 7 et Windows 8.1 Pb 5.0 jusque 5.24 Lts 64 et 5.3 (64)/b]
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
“Ceux qui rêvent éveillés ont conscience de mille choses qui échappent à ceux qui ne rêvent qu’endormis.”
-Edgar Allan Poe-
- falsam
- Messages : 7318
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: Saisie numérique dans un string gadget avec 1 à n décima
C'est drole j'ai l'impression de retrouver mon code en début de se post :p La boucle est ....bouclée.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: Saisie numérique dans un string gadget avec 1 à n décima
OUI,oui
Gebonnet tu parle de quelle collaboration ? falsam as tu essayé mon dernier code?
Salut les amis
Gebonnet tu parle de quelle collaboration ? falsam as tu essayé mon dernier code?
Salut les amis