- Un fichier include StrMaskDec.pbi
Code : Tout sélectionner
; StrMaskDec - V1.00
;
;Using : StrMaskDec(Gadget,IntegerLenght,DecimalLenght)
;
;Compatibility : Windows
;
Procedure StrMaskDec(Gadget,IntegerLenght,DecimalLenght)
ValText.s ;String Value
ValASCII.b ;ASCII Value
PartEnt.s ;Integer Value
PartDec.s ;Décimal Value
x.b ;Longueur de la chaine en cours de saisie
y.b ;Position du point decimal
ValText=GetGadgetText(gadget)
Select EventType()
Case #PB_EventType_Focus
;Le texte de l'edit control est selectionné totalement
SendMessage_(GadgetID(Gadget), #EM_SETSEL, 0, -1)
Case #PB_EventType_LostFocus
;Il est temps de mettre en forme le résultat
x = Len(ValText)
y = FindString(ValText,".",1)
If y<>0
PartEnt=Left(ValText,y-1)
If PartEnt=""
PartEnt="0"
EndIf
PartDec=Right(ValText,x-y)
SetGadgetText(Gadget,PartEnt+"."+LSet(PartDec,Len(PartDec)+(DecimalLenght-Len(PartDec)),"0"))
Else
SetGadgetText(Gadget,ValText+"."+LSet("0",DecimalLenght,"0"))
EndIf
Case #PB_EventType_Change
;Il y a du changement dans notre string
x=Len(ValText)
y = FindString(ValText,".",1)
;Seul les caractéres de 0 à 9 ainsi que le point décimal sont autorisés
ValASCII = Asc(Right(GetGadgetText(Gadget),1))
Select ValASCII
Case 46
;Un point est saisi. On teste qu'il y en a bien qu'un seul
If CountString(GetGadgetText(Gadget),".")>1
keybd_event_(#VK_BACK,0,0,0)
EndIf
Case 48 To 57
; Chiffres de 0 à 9
;Il y a t'il un point decimal et en quelle position
y = FindString(ValText,".",1)
If y>0
;La taille de la partie entiére ne doit etre > à celle autorisée (IntegerLenght)
If Len(Left(ValText,y-1))>IntegerLenght
keybd_event_(#VK_BACK,0,0,0)
EndIf
;La taille de la partie décimale ne doit etre > à celle autorisée (DecimalLenght)
If Len(Right(ValText,x-y))>DecimalLenght
keybd_event_(#VK_BACK,0,0,0)
EndIf
Else
;Pas de partie decimale pour le moment dans notre saisie
;La taille de la partie entiére ne doit etre > à celle autorisée (IntegerLenght)
If Len(ValText)>IntegerLenght
keybd_event_(#VK_BACK,0,0,0)
EndIf
EndIf
Default
;Ce n'est pas des chiffres
keybd_event_(#VK_BACK,0,0,0)
EndSelect
EndSelect
EndProcedure
Code : Tout sélectionner
XIncludeFile "StrMaskDec.pbi"
Enumeration
#MainForm
#MntHt
#MntTtc
EndEnumeration
Procedure MainFormShow()
If OpenWindow(#MainForm,0,0,400,150,"Nouvelle application",#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)
EndIf
EndProcedure
Procedure CalculTTC()
MntHt.f=ValF(GetGadgetText(#MntHt))
MntTtc.f=MntHt*(1.196)
SetGadgetText(#MntTtc,StrD(MntTtc,2))
EndProcedure
MainFormShow()
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
If EventGadget() = #MntHt
StrMaskDec(#MntHt,5,2)
CalculTTC()
EndIf
EndSelect
ForEver
La prochaine étape constituera à mettre en place un masque d'affichage du genre ### ###.## (Ex : 12555.15 affichera 12 555.15)