J'ai souvent eu besoin d'un string numérique avec des décimales. Alors voici.
Vous pouvez entrez des chiffres positifs ou négatifs. De plus la virgule est transformée en point. Donc utilisable directement par exemple avec ValD.
Code : Tout sélectionner
Enumeration
#Ma_fen:#stringD
EndEnumeration
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 Len(GetGadgetText(Gadget))> 1 And ValeurASCII = 45:ValeurASCII = 0:EndIf ;evite de mettre le signe - dans les chiffres
If ValeurASCII = 46 Or ValeurASCII = 45
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(#Ma_fen,720,75,660,250,"Ma Fenêtre",#PB_Window_MinimizeGadget)
;Vos gadgets ici
StringGadget(#stringD,45,100,210,30,"",#ES_CENTER)
;
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #stringD
String_NumericD(#stringD)
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
End