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.
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
Auch ich danke für Eure Ideen
