Page 2 sur 3

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : dim. 03/oct./2010 22:44
par Backup
..........

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : dim. 03/oct./2010 22:56
par falsam
Dobro a écrit :je t'avais donné le lien mais bon ...

Typhoon avait fait ça
Rhoooo Dobro, je pense que tu n'as pas pris la peine de lire mon post qui est certes trop long :) J'ai inclus la procedure de Typhoon en n'oubliant pas de citer son nom.

Dobro a écrit :pis bon arrete avec tes PBI
Les include (Pbi) sont très pratiques et évitent ainsi d'alourdir un programme avec du code maintes fois testé.
Dobro a écrit :utilise les procedures comme ci dessus
Justement Dobro, ce sont des procédures :p

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : lun. 04/oct./2010 0:17
par Backup
falsam a écrit :
Dobro a écrit :pis bon arrete avec tes PBI
Les include (Pbi) sont très pratiques et évitent ainsi d'alourdir un programme avec du code maintes fois testé.
comprends pas l'intérêt !
autant utiliser une librairie dans ce cas ..
l'avantage , si tu n'utilise pas la fonction, elle n'est pas inclue !



falsam a écrit :
Dobro a écrit :utilise les procedures comme ci dessus
Justement Dobro, ce sont des procédures :p
pas forcement !
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

Publié : mer. 06/avr./2011 17:03
par MLD
Pour le fun. Une autre façon de voir les choses :mrgreen:

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

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : mer. 06/avr./2011 22:47
par falsam
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.

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : jeu. 07/avr./2011 10:02
par MLD
falsam a écrit :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.
8O
Heu!. ou faut'il saisir deux fois la virgule :?: :?:

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : ven. 08/avr./2011 7:51
par falsam
L'exemple que tu donnes permet de saisir des caractères alphanumériques.

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : ven. 08/avr./2011 8:21
par MLD
falsam a écrit :L'exemple que tu donnes permet de saisir des caractères alphanumériques.
Salut
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. :wink:

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

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : ven. 08/avr./2011 8:24
par falsam
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.

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : ven. 08/avr./2011 8:55
par MLD
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. :wink:
En ce moment le temps me manque, mais je te proposerait une solution. :wink:
Bonne journée
Michel

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : ven. 08/avr./2011 8:59
par falsam
MLD a écrit :Ok .Il ne faut pas prendre les opérateurs pour des demeurés.
Sans les prendre pour des demeurés, le doigt est parfois lourd sur le clavier et certains oublient d'enlever les moufles :p

A bientôt.

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : sam. 09/avr./2011 16:03
par MLD
Salut falsam

j'ai fait quelques modifs a mon code. en principe c'est ok :lol:

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

Nombre de chiffres aprés le point illimité a la saisie, selon le choix. Point ou virgule pris en compte.

Bon W.E :lol:
Michel

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : sam. 09/avr./2011 18:12
par GeBonet
Bonne, et intéressante collaboration... J'ajoute ma très très petite pierre à l''édifice... Par :

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
Cela n'ajoute rien de plus que de pouvoir entrer le Taux de TVA...
Et de montrer comment utiliser étendre votre code !!! :wink:
Merci :lol:

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : sam. 09/avr./2011 21:06
par falsam
C'est drole j'ai l'impression de retrouver mon code en début de se post :p La boucle est ....bouclée.

Re: Saisie numérique dans un string gadget avec 1 à n décima

Publié : dim. 10/avr./2011 14:32
par MLD
OUI,oui
Gebonnet tu parle de quelle collaboration ? falsam as tu essayé mon dernier code?
Salut les amis