Re: Saisie numérique dans un string gadget avec 1 à n décima
Publié : dim. 03/oct./2010 22:44
..........
Forums PureBasic - Français
https://www.purebasic.fr/french/
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
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
pas forcement !falsam a écrit :Justement Dobro, ce sont des procédures :pDobro a écrit :utilise les procedures comme ci dessus
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 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.
Salutfalsam a écrit :L'exemple que tu donnes permet de saisir des caractères alphanumériques.
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
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.
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
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