Mit StringGadget Kommazahl einlesen

Anfängerfragen zum Programmieren mit PureBasic.
nschu
Beiträge: 1
Registriert: 20.01.2010 17:49

Re: Mit StringGadget Kommazahl einlesen

Beitrag von nschu »

Danke @Danilo

Ich finde es toll dass Ihr alle im Forum Beispiele gibt.

So kann man Purebasic gut lernen. :allright:
Benutzeravatar
Pelagio
Beiträge: 423
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

Beitrag von Pelagio »

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 :praise:
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win10Pro(64); PB6.03 LTS]. :allright:
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Mit StringGadget Kommazahl einlesen

Beitrag von mk-soft »

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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Antworten