Nombre à virgule dans un StringGadget
Nombre à virgule dans un StringGadget
Bonjour,
Il serait bien que l'on puisse entrer des nombres à virgule dans un stringGadget avec le flag #PB_String_ReadOnly.
Si c'est faisable, comment on fait ?
Il serait bien que l'on puisse entrer des nombres à virgule dans un stringGadget avec le flag #PB_String_ReadOnly.
Si c'est faisable, comment on fait ?
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
J'ai regardé dans les api et j'ai l'impression que c'est prévu fonctionner comme ça.
J'ai donc fait ce petit code:
Je l'ai codé de manière qu'il ne soit pas possible d'afficher deux fois la virgule et que le premier caractère ne puisse pas être une virgule. Une autre condition empêche la "," de s'afficher si on appuie sur cette touche lors d'une sélection du contenu avec la souris.
J'ai donc fait ce petit code:
Je l'ai codé de manière qu'il ne soit pas possible d'afficher deux fois la virgule et que le premier caractère ne puisse pas être une virgule. Une autre condition empêche la "," de s'afficher si on appuie sur cette touche lors d'une sélection du contenu avec la souris.
Code : Tout sélectionner
If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))
StringGadget(1,8, 35,306,20,"1234567",#PB_String_Numeric)
ButtonGadget(2,8,100,306,20,"Voir le contenu")
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #WM_KEYDOWN
If GetFocus_()=GadgetID(1)
If EventwParam()=$6E
Texte$ = GetGadgetText(1)
If Texte$<>""
If FindString(Texte$, ",", 1)=0
SetClipboardText(","); le point ne se voit pas beaucoup, alors je met une ","
SendMessage_(GadgetID(1),#wm_paste,0,0)
If Len(GetGadgetText(1))=1
SetGadgetText(1,"")
EndIf
EndIf
EndIf
EndIf
EndIf
Case #PB_EventGadget
Select EventGadgetID()
Case 2
Texte$=GetGadgetText(1)
Debug Texte$
String$ = ReplaceString(Texte$, ",", "." , 1 )
Debug String$
EndSelect
Case #PB_Event_CloseWindow
Quit=1
EndSelect
Until Quit = 1
EndIf
Un exemple plus adapté:
Code : Tout sélectionner
Procedure test(index.l)
If EventwParam()=$6E
Texte$ = GetGadgetText(index)
If Texte$<>""
If FindString(Texte$, ",", 1)=0
SetClipboardText(","); le point ne se voit pas beaucoup, alors je met une ","
SendMessage_(GadgetID(index),#wm_paste,0,0)
If Len(GetGadgetText(index))=1
SetGadgetText(index,"")
EndIf
EndIf
EndIf
EndIf
EndProcedure
If OpenWindow(0,0,0,322,275,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"StringGadget Flags") And CreateGadgetList(WindowID(0))
StringGadget(0,8, 5,306,20,"",#PB_String_Numeric)
StringGadget(1,8, 55,306,20,"",#PB_String_Numeric)
StringGadget(2,8, 105,306,20,"",#PB_String_ReadOnly )
ButtonGadget(3,8,160,306,20,"Voir le résultat de l'addition")
TextGadget(4,8,35,306,20,"+",#PB_Text_Center)
TextGadget(5,8,135,306,20,"=",#PB_Text_Center)
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #WM_KEYDOWN
Select GetFocus_()
Case GadgetID(0)
test(0)
Case GadgetID(1)
test(1)
EndSelect
Case #PB_EventGadget
Select EventGadgetID()
Case 3
Texte1$=GetGadgetText(0)
Texte2$=GetGadgetText(1)
Texte1$ = ReplaceString(Texte1$, ",", "." , 1 )
Texte2$ = ReplaceString(Texte2$, ",", "." , 1 )
number1.f=ValF(Texte1$)
number2.f=ValF(Texte2$)
total$=StrF(number1+number2)
SetGadgetText(2,total$)
EndSelect
Case #PB_Event_CloseWindow
Quit=1
EndSelect
Until Quit = 1
EndIf
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :