Mit StringGadget Kommazahl einlesen
Mit StringGadget Kommazahl einlesen
Hallo,
ich möchte mit StringGadget Kommazahl einlesen.
Im CodeArchiv/Gadgets/StringGadget/ habe ich StringGadget_Numeric.pb gefunden.
Gibt es so was für Kommazahlen (einlesen von z.B. 0,99 oder 123 oder 123,9) ?
Danke und Gruß
MarceX
ich möchte mit StringGadget Kommazahl einlesen.
Im CodeArchiv/Gadgets/StringGadget/ habe ich StringGadget_Numeric.pb gefunden.
Gibt es so was für Kommazahlen (einlesen von z.B. 0,99 oder 123 oder 123,9) ?
Danke und Gruß
MarceX
Win-10, PB 5.31 (Windows - x86)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mit StringGadget Kommazahl einlesen
Der Code im CodeArchiv hat eher nichts mit Deiner Frage zu tun, jedenfalls sehe ich da den Zusammenhang nicht.
Hier ein Beispiel (Windows-Only), das nur die Zahlen, sowie das Komma akzeptieren.
Achtung: Das Komma wird auch mehrfach akzeptiert. Wenn das nicht gewünscht ist, sind noch
Erweiterungen notwendig.
Gruß
Thomas
Hier ein Beispiel (Windows-Only), das nur die Zahlen, sowie das Komma akzeptieren.
Achtung: Das Komma wird auch mehrfach akzeptiert. Wenn das nicht gewünscht ist, sind noch
Erweiterungen notwendig.
Code: Alles auswählen
EnableExplicit
Procedure cbStringGadget(hWnd, uMsg, wParam, lParam)
Protected oldproc = GetProp_(hWnd, "oldproc")
Select uMsg
Case #WM_NCDESTROY
RemoveProp_(hWnd, "oldproc")
Case #WM_CHAR
Select wParam
Case 48 To 57, 44 ; 0 - 9, komma
Default
ProcedureReturn 0 ; kein gültiges Zeichen
EndSelect
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure SubClassStringGadget(ID)
Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @cbStringGadget())
ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
SubClassStringGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Mit StringGadget Kommazahl einlesen
Danke RSBasic und ts-soft
damit kann ich schon was anfangen
damit kann ich schon was anfangen
Win-10, PB 5.31 (Windows - x86)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mit StringGadget Kommazahl einlesen
Hab mal so erweitert, das Backspace funktioniert und das Komma nur einmal eingegeben werden kann:
Ich hoffe, ich habe nicht noch mehr übersehen
Code: Alles auswählen
EnableExplicit
Procedure cbStringGadget(hWnd, uMsg, wParam, lParam)
Protected oldproc = GetProp_(hWnd, "oldproc")
Select uMsg
Case #WM_NCDESTROY
RemoveProp_(hWnd, "oldproc")
Case #WM_CHAR
Select wParam
Case '0' To '9', #VK_BACK
Case ','
If CountString(GetGadgetText(GetProp_(hWnd, "PB_ID")), ",")
ProcedureReturn 0
EndIf
Default
ProcedureReturn 0 ; kein gültiges Zeichen
EndSelect
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure SubClassStringGadget(ID)
Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @cbStringGadget())
ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
SubClassStringGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Mit StringGadget Kommazahl einlesen
So funktioniert es.
Was ich haben wollte, ist die Eingabe wie z.B. -123 (negative Werte) 123,56 (positive Werte mit maximale 2 Stellen nach den Komma)
Mit diese Basis kann ich (denke ich) was anfangen.
Was ich haben wollte, ist die Eingabe wie z.B. -123 (negative Werte) 123,56 (positive Werte mit maximale 2 Stellen nach den Komma)
Mit diese Basis kann ich (denke ich) was anfangen.
Win-10, PB 5.31 (Windows - x86)
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mit StringGadget Kommazahl einlesen
Naja, bin mir nicht so sicher ob Du das packst und wenn ich gerade bei bin
Es kann nur einmal minus eingefügt werde und dieses wird auch gleich an den Anfang gerückt.
Man könnte auch auf Len(...) = 0 prüfen und nur dann das - zulassen. Ist vielleicht etwas irritierend,
wenn ein Minus an den Anfang rückt
Code: Alles auswählen
EnableExplicit
Procedure cbStringGadget(hWnd, uMsg, wParam, lParam)
Protected oldproc = GetProp_(hWnd, "oldproc")
Select uMsg
Case #WM_NCDESTROY
RemoveProp_(hWnd, "oldproc")
Case #WM_CHAR
Select wParam
Case '0' To '9', #VK_BACK
Case '-'
If CountString(GetGadgetText(GetProp_(hWnd, "PB_ID")), "-")
ProcedureReturn 0
EndIf
SetGadgetText(GetProp_(hWnd, "PB_ID"), "-" + GetGadgetText(GetProp_(hWnd, "PB_ID")))
ProcedureReturn 0
Case ','
If CountString(GetGadgetText(GetProp_(hWnd, "PB_ID")), ",")
ProcedureReturn 0
EndIf
Default
ProcedureReturn 0 ; kein gültiges Zeichen
EndSelect
EndSelect
ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure SubClassStringGadget(ID)
Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @cbStringGadget())
ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
SubClassStringGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver
Man könnte auch auf Len(...) = 0 prüfen und nur dann das - zulassen. Ist vielleicht etwas irritierend,
wenn ein Minus an den Anfang rückt
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Mit StringGadget Kommazahl einlesen
Oder mit regulären Ausdrücken prüfen:
Code: Alles auswählen
;
; by Danilo
;
; http://www.purebasic.fr/german/viewtopic.php?f=16&t=26388&start=7
;
; Nummern-Eingabe Beispiele: 123 567,88 -12 -4,5
;
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
CreateRegularExpression(0,"^\-{0,1}\d*$|^\-{0,1}\d+\,\d{0,2}$|^$") ; ^ = Anfang des Strings
; $ = Ende des Strings
; \d = Dezimalzahl 0-9
; + = 1 oder mehr Vorkommen
; * = 0 oder mehr Vorkommen
; | = alternative Moeglichkeit (Or in PureBasic)
; \, = Komma
; \-{0,1} = Minus{0 oder 1 mal}
; \d{0,2} = Dezimalzahl 0-9 { 0 bis 2 mal }
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 0 And EventType() = #PB_EventType_Change
txt$ = GetGadgetText(0)
If MatchRegularExpression(0,txt$)=0 ; wenn kein Treffer, dann wieder vorherigen text setzen
SendMessage_(GadgetID(0),#EM_GETSEL,0,@endpos) : endpos - 1 ; cursor position holen
SetGadgetText(0,old$) ; alten text wieder setzen
SendMessage_(GadgetID(0),#EM_SETSEL,endpos,endpos) ; cursor position wieder setzen
Else
old$ = txt$
EndIf
EndIf
EndSelect
ForEver
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Mit StringGadget Kommazahl einlesen
@Danilo
, aber ich bekomme beim entwerfen des Ausdrucks immer einen Wurm im Kopf
, aber ich bekomme beim entwerfen des Ausdrucks immer einen Wurm im Kopf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Mit StringGadget Kommazahl einlesen
@Danilo
deine Lösung mit RegularExpression finde ich super und es funktioniert
deine Lösung mit RegularExpression finde ich super und es funktioniert
Win-10, PB 5.31 (Windows - x86)