NumberFields in Maxgui? Need some help
BlitzMax Forums/BlitzMax Beginners Area/NumberFields in Maxgui? Need some help
| ||
Hi, I'm trying to get started on a simple MAxGUI app with the demo. (but I own BlitzMax however). When my app launches the user is prompted to enter names, I did that with the CreateTextField() function. Now I'd like the user to enter some numeric values in other fields, and retrieve them as integers. Obviously I can't do that with CreateTextField(). Is there a equivalent to it which would only accept numbers? (like a CreateNumtField() thingy ?). I can't find info about this in the doc. Thanks a lot ! Nino |
| ||
Simple, the textfield accepts *everything*.. and at each textfield event (you typed something) you get the contents of the textfield, get rid of non-numbers yourself, and put the filtered text back. Another solution is to make a special new gadget yourself which looks like an editfield, but only accepts numbers.. |
| ||
Thanks CS_TBL, But I guess I'm too much of a beginner to do that. Hints would be welcome. Thanks a lot :) |
| ||
SuperStrict Local window:TGadget=CreateWindow("o_O",0,0,640,480) Local tf:TGadget=CreateTextField(32,32,64,20,window,2) Local a:String Local a2:String Local a3:String Local t:Int Repeat WaitEvent() If EventID()=EVENT_WINDOWCLOSE End If EventID()=EVENT_GADGETACTION If EventSource()=tf a=TextFieldText(tf) a2="" For t=0 Until Len(a) a3=Mid(a,t+1,1) If Instr("0123456789",a3) ' number found? a2:+a3 EndIf Next SetGadgetText tf,a2 EndIf EndIf Forever I leave it up to you to make a decent function out of it. :P |
| ||
Thanks, I'll dig that in the morning ! |
| ||
oh heck, what the f*ck .. here ya go. A hookie for a rookie :PSuperStrict ' =========================================================================== ' =========================================================================== ' =========================================================================== Type TNumfield Field tf:TGadget Field NewEvent:TEvent=New TEvent Function eventhook:Object(id:Int,data:Object,context:Object) If TNumfield(context) TNumfield(context).ev TEvent(data);Return data EndFunction Method New() AddHook EmitEventHook,eventhook,Self End Method Method Free() RemoveHook EmitEventHook,eventhook FreeGadget tf GCCollect() End Method Method ev(event:TEvent) Local t:Int Local a:String Local a2:String Local a3:String If Event.id=EVENT_GADGETACTION If Event.source=tf a=TextFieldText(tf) a2="" For t=0 Until Len(a) a3=Mid(a,t+1,1) If Instr("0123456789",a3) ' number found? a2:+a3 EndIf Next SetGadgetText tf,a2 NewEvent.ID=EVENT_GADGETACTION NewEvent.source=Self EmitEvent NewEvent EndIf EndIf End Method Method Value$() Return TextFieldText(tf) End Method End Type Function CreateNumfield:TNumfield(x:Int,y:Int,w:Int,h:Int,parent:TGadget,style:Int=0) Local a:TNumfield=New TNumfield a.tf=CreateTextField(x,y,w,h,parent,style) Return a End Function ' =========================================================================== ' =========================================================================== ' =========================================================================== Local window:TGadget=CreateWindow("o_O",0,0,640,480) Local tf:TNumfield=CreateNumField(32,32,64,20,window,2) Repeat WaitEvent() If EventID()=EVENT_WINDOWCLOSE And EventSource()=window tf.Free End EndIf If EventSource()=tf DebugLog tf.Value() EndIf Forever |
| ||
Hi, Have a look here also, Eikon and Pert came up with some good ways to filter out non numeric data in a text field. http://www.blitzbasic.com/Community/posts.php?topic=55626 |