Erlaubt das setzen von genau einem Komma oder einem Punkt in einem StringGadget. Und verbietet die Zeichen $, %, #
Code: Alles auswählen
Enumeration
#ListWin
#ListWinStrID
#ListWinFieldFrame
#ListWinGroupFrame
EndEnumeration
#x=25
#c=-40
#v=10
#n=10
#m=-150
Procedure.s FormatString(String$,Repl$)
Static i,l
l=Len(Repl$)
If l<>0
For i=1 To l
String$=ReplaceString(String$,Mid(Repl$,i,1),"") ; entfernen
Next
EndIf
ProcedureReturn String$
EndProcedure
Procedure.s AreThereChars(String$,Find$,onetimeonly.l=1)
Static i,l,A,k
Static S.s,c.s
S=""
l=Len(Find$)
If l<>0
For i=1 To l
c=Mid(Find$,i,1)
A=CountString(String$,c)
If A>0
If onetimeonly
A=1
EndIf
For k=1 To A
S=S+c
Debug S
Next
EndIf
Next
EndIf
ProcedureReturn S
EndProcedure
Define SaveString$=""
If OpenWindow(#ListWin, 1145, 0, 445, 290, "Liste einstellen", #PB_Window_SystemMenu )
CreateGadgetList(WindowID(#ListWin))
Frame3DGadget(#ListWinGroupFrame,300+#m,#x+#c+15,290,260,"")
Frame3DGadget(#ListWinFieldFrame,155+#m,#x+#c+15,140,260,"")
StringGadget(#ListWinStrID,205+#m,#x+55+#c,80,20,"FeldID")
GadgetToolTip(#ListWinStrID,"keine # $ %")
Repeat
Event = WaitWindowEvent()
EventType=EventType()
If Event=#PB_Event_Gadget
GadgetNr=EventGadget()
If GadgetNr=#ListWinStrID
If EventType=#PB_EventType_Change
If Len(AreThereChars(GetGadgetText(#ListWinStrID),"#%$"))<>0
SetGadgetText(#ListWinStrID,FormatString(GetGadgetText(#ListWinStrID),"#%$"))
EndIf
; Nur ein Komma oder ein Punkt
If Len(AreThereChars(GetGadgetText(#ListWinStrID),".,",0))=1
SaveString$=GetGadgetText(#ListWinStrID)
EndIf
If Len(AreThereChars(GetGadgetText(#ListWinStrID),".,",0))=2
SetGadgetText(#ListWinStrID,SaveString$)
EndIf
EndIf
EndIf
ElseIf Event = #PB_Event_CloseWindow
If EventWindow()=#ListWin
Quit = 1
EndIf
EndIf
Until Quit = 1
EndIf
End
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Alter Code: Problem:
Heho Freunde,
eine Möglichkeit wäre sicherlich
http://www.purebasic.fr/german/viewtopi ... ng+eingabe
Jeden zugelassenen Buchstaben neu zu programmieren.
Einschließlich der Pfeiltasten.
>> Aber ich will ja das Rad nicht neu erfinden.
Meine Idee:
Code: Alles auswählen
Enumeration
#ListWin
#ListWinStrID
#ListWinFieldFrame
#ListWinGroupFrame
EndEnumeration
#x=25
#c=-40
#v=10
#n=10
#m=-150
Procedure.s FormatString(String$)
String$=ReplaceString(String$,"#","")
String$=ReplaceString(String$,"$","")
String$=UCase(String$)
String$="#"+String$+"$"
ProcedureReturn String$
EndProcedure
If OpenWindow(#ListWin, 1145, 0, 445, 290, "Liste einstellen", #PB_Window_SystemMenu )
CreateGadgetList(WindowID(#ListWin))
Frame3DGadget(#ListWinGroupFrame,300+#m,#x+#c+15,290,260,"")
Frame3DGadget(#ListWinFieldFrame,155+#m,#x+#c+15,140,260,"")
StringGadget(#ListWinStrID,205+#m,#x+55+#c,80,20,"FeldID")
Repeat
Event = WaitWindowEvent()
EventType=EventType()
If Event=#PB_Event_Gadget
GadgetNr=EventGadget()
If GadgetNr=#ListWinStrID
If EventType=#PB_EventType_Change
SetGadgetText(#ListWinStrID,FormatString(GetGadgetText(#ListWinStrID)))
EndIf
EndIf
ElseIf Event = #PB_Event_CloseWindow
If EventWindow()=#ListWin
Quit = 1
EndIf
EndIf
Until Quit = 1
EndIf
End
UpCase könnte man ja auch noch anders regeln.
Aber wie sieht es zum Beispiel mit Zifferneingabe aus, wo man genau ein Komma zulassen möchte?
Es sollte eine Methode sein, die keine Neuentwicklung des Gadgets benötigt.
Irgendwo hab ich hier schon mal was gelesen, aber ich find den Beitrag nicht mehr. Schön wäre auch, wenn es Plattform-übergreifend funktioniert.
Dank euch.
