Danke @Danilo
Ich finde es toll dass Ihr alle im Forum Beispiele gibt.
So kann man Purebasic gut lernen.
Mit StringGadget Kommazahl einlesen
- Pelagio
- Beiträge: 424
- Registriert: 11.11.2004 17:52
- Computerausstattung: Intel Core i3-4170 CPU 3,70 GHz
8,00 GB Arbeitsspeicher
WIN 10 Pro 64 Bit Betriebssystem - Wohnort: Bremen
Re: Mit StringGadget Kommazahl einlesen
Ich wollt meinen Senf auch dazu geben,
denn ich finde die Idee von Danilo sehr interessant.
Bis dato habe ich, ähnlich wie ts-soft, meine Stringgadgets auf Numerickurs gebracht
aber ich werde es wohl jetzt auf die Art von Danilo ändern. Auch ich danke für Eure Ideen
denn ich finde die Idee von Danilo sehr interessant.
Bis dato habe ich, ähnlich wie ts-soft, meine Stringgadgets auf Numerickurs gebracht
aber ich werde es wohl jetzt auf die Art von Danilo ändern.
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
; mit kleiner Änderung
;
Procedure CreateNumericString(vID.i, vKomma.s = Chr(44), vNKv.a = 0, vNKb.a = 2)
Protected pText.s = "^\-{0,1}\d*$|^\-{0,1}\d+\"
pText + vKomma + "\d{"
pText + Str(vNKv) + ","
pText + Str(vNKb) + "}$|^$"
CreateRegularExpression(vID, pText)
;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 }
EndProcedure
Procedure InputNumericString(vID.i)
Protected pEndPos.i, pString.s = GetGadgetText(vID)
Static Dim pText.s(1)
If (pText(0)<>Str(vID)): pText(0) = Str(vID): pText(1) = Left(pString, Len(pString)-1): EndIf
If (MatchRegularExpression(vID, pString)=#False) ; wenn kein Treffer, dann wieder vorherigen text setzen
SendMessage_(GadgetID(vID), #EM_GETSEL, #False, @pEndPos) ; cursor position holen
pEndPos - 1
SetGadgetText(vID, pText(1)) ; alten text wieder setzen
SendMessage_(GadgetID(vID), #EM_SETSEL, pEndPos, pEndPos) ; cursor position wieder setzen
Else
pText(1) = pString
EndIf
EndProcedure
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 70, "")
StringGadget(0, 10, 10, 200, 20, ""): CreateNumericString(0)
StringGadget(1, 10, 40, 200, 20, ""): CreateNumericString(1)
SetActiveGadget(0)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If (EventType()=#PB_EventType_Change)
Select EventGadget()
Case 0: InputNumericString(0)
Case 1: InputNumericString(1)
EndSelect
EndIf
EndSelect
ForEver
End
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB6.10 LTS].
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB6.10 LTS].
Re: Mit StringGadget Kommazahl einlesen
Ok,
damit es auch auf allen OS funktioniert, kann man auch eigene Gadgets mit dem CanvasGadget erstellen.
Hier mal ein paar Beispiele auch mit einem NumberGadget
Link: https://www.purebasic.fr/english/viewto ... 12&t=74267
damit es auch auf allen OS funktioniert, kann man auch eigene Gadgets mit dem CanvasGadget erstellen.
Hier mal ein paar Beispiele auch mit einem NumberGadget
Link: https://www.purebasic.fr/english/viewto ... 12&t=74267
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive