Number Range in Input Field

Got a LiveCode personal license? Are you a beginner, hobbyist or educator that's new to LiveCode? This forum is the place to go for help getting started. Welcome!

Moderators: FourthWorld, heatherlaine, Klaus, kevinmiller

Post Reply
velcrobelly
Posts: 7
Joined: Sat Apr 25, 2020 8:27 pm

Number Range in Input Field

Post by velcrobelly » Sat Apr 25, 2020 8:33 pm

I need to have an input field that accepts numbers only within the range of -20 to 20.

I have part of the code working, but can't figure out the range feature. Any help would be appreciated.

Code: Select all

on KeyDown theKey
   if (the text of me & theKey) is a number then
      pass keyDown
   else if the text of me is empty and theKey is "-" then
      pass keyDown
   end if
end KeyDown

Klaus
Posts: 14194
Joined: Sat Apr 08, 2006 8:41 am
Contact:

Re: Number Range in Input Field

Post by Klaus » Sat Apr 25, 2020 9:41 pm

Hi velcrobelly,

welcome to the forum!

Do this, tested and works. :-)

Code: Select all

on keyDown tKey
   
   ## 1. Filter input!
   if tKey is NOT in "-0123456789" then
      exit keydown
   end if
   
   ## 2. Allow the MINUS sign as first character!
   if me = EMPTY then
      pass keydown
   end if
   ## ME = short for -> the text of me
   
   ## 3. Now check possible new content
   put me & tKey into tNewNumber
   if tNewNumber is a number AND tNewNumber > -21 AND tNewNumber < 21 then
      pass keydown
   end if
end keyDown
Best

Klaus

Personal note:
A little Hello or something would not have hurt for the very first posting.

velcrobelly
Posts: 7
Joined: Sat Apr 25, 2020 8:27 pm

Re: Number Range in Input Field

Post by velcrobelly » Sat Apr 25, 2020 9:51 pm

This works great. Thanks!

dunbarx
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 10320
Joined: Wed May 06, 2009 2:28 pm

Re: Number Range in Input Field

Post by dunbarx » Sat Apr 25, 2020 10:26 pm

Just to waste time, since Klaus' post was spot on, I sometimes just like to try to make such things as short as possible.

For no good reason.

Code: Select all

on KeyDown tKey
   if tKey = "-" and "-" is not in me then put "-" into me
   if me & tKey  >= -20 and me & tKey <= 20 then put tkey after me
end KeyDown

on mouseEnter -- not needed, I just like to refresh
   put "" into me
   select the text of me
end mouseEnter
Two lines, Klaus.

But is that the user experience you wanted (for either method)? That is, if you have a "2" in place, the field simply refuses to accept, say, a "5"?

The old fashioned way to do this is to put up an "ask" dialog, and validate the total entry. If it flies, load the value. If it does not, announce that fact, so the user can try again.

Just sayin'

Craig

Klaus
Posts: 14194
Joined: Sat Apr 08, 2006 8:41 am
Contact:

Re: Number Range in Input Field

Post by Klaus » Sun Apr 26, 2020 12:16 pm

Yes, Craig, two lines! :D

I'm sure I could squeeze this into ONE line, but I wanted to make the underlying logics more clear! 8)

dunbarx
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 10320
Joined: Wed May 06, 2009 2:28 pm

Re: Number Range in Input Field

Post by dunbarx » Sun Apr 26, 2020 3:11 pm

Klaus.

One line, eh?

I could not make something like this work:

Code: Select all

if tKey = "-" and "-" is not in me then put "-" into me else if me & tKey  >= -20 and me & tKey <= 20 then put tkey after me
You can see why. Without separating the snippet that handles "-" and the one that handles the numbers, the single line above will allow a second "-" to appear (as, say, "-1-").

I would love to see you take a crack at a one liner. :wink:

Craig

Klaus
Posts: 14194
Joined: Sat Apr 08, 2006 8:41 am
Contact:

Re: Number Range in Input Field

Post by Klaus » Sun Apr 26, 2020 3:52 pm

OK, OK, I lied, the important part of my sentence is the second one. :D

dunbarx
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 10320
Joined: Wed May 06, 2009 2:28 pm

Re: Number Range in Input Field

Post by dunbarx » Sun Apr 26, 2020 5:10 pm

Klaus.

As I said, I only do this sort of thing to waste time.

Craig

velcrobelly
Posts: 7
Joined: Sat Apr 25, 2020 8:27 pm

Re: Number Range in Input Field

Post by velcrobelly » Sun Apr 26, 2020 5:48 pm

So, then another challenge for either of you...

After the field has content, then I try to edit the field by selecting/highlighting the characters in the field using the mouse, it does not allow me to type in a new number. I have to hit delete or backspace. Is there a way to take that into consideration?

dunbarx
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 10320
Joined: Wed May 06, 2009 2:28 pm

Re: Number Range in Input Field

Post by dunbarx » Sun Apr 26, 2020 6:03 pm

I suppose anything can be accomplished in LC with enough fooling around. Perhaps the original handler might only fire if the option key is down, and if up (its natural state?), the field is simply open for editing.

But this wrinkle is just the sort of reason I asked whether an "ask" dialog, requesting the user to enter data, with subsequent validation, is a better approach. The constraints placed on the field in the original implementation are interfering with the "editing" you now want to do in that field.

It is often the case that one has to simply rethink the flow of one's script, and take another tack.

Craig

SparkOut
Posts: 2947
Joined: Sun Sep 23, 2007 4:58 pm

Re: Number Range in Input Field

Post by SparkOut » Sun Apr 26, 2020 6:15 pm

A slider or dial to restrict the options to the limited range of choices is another possibility. It is possible to script for keyboard control with arrow keys etc, for good measure.

dunbarx
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 10320
Joined: Wed May 06, 2009 2:28 pm

Re: Number Range in Input Field

Post by dunbarx » Sun Apr 26, 2020 6:26 pm

Sparkout.

Hi.

Do you mean a slider with range -20 to +20, where the user drags the thumb to the desired value and lets that value be loaded into the field? You are a man after my own heart. :wink:

Cute, but a bit cumbersome, no? And we can only hope that one day the range does not go from -3000 to +3000.

The issue is the original (cute) idea about letting a handler manage successive keystrokes into a field (which is after my own heart as well).

It needs to be abandoned if this other stuff is now required.

Craig

dunbarx
VIP Livecode Opensource Backer
VIP Livecode Opensource Backer
Posts: 10320
Joined: Wed May 06, 2009 2:28 pm

Re: Number Range in Input Field

Post by dunbarx » Mon Apr 27, 2020 4:03 pm

So, then another challenge for either of you...

After the field has content, then I try to edit the field by selecting/highlighting the characters in the field using the mouse, it does not allow me to type in a new number. I have to hit delete or backspace. Is there a way to take that into consideration?
Hi again.

If you select a char in the field, and then try to add another number, the very nature of the handler prevents this; it thinks you want a three digit entry, which is forbidden. If you delete the second char, and then type a number, assuming it is within range, the field accepts that entry. If delete char 1, move the cursor to the right, and key a number, the field will accept it, assuming as always it is in range.

If you highlight the entire text, again any new keystroke would be seen as trying to enter a three digit number. So the latest kluge would be:

Code: Select all

on KeyDown tKey
   if tKey = "-" and "-" is not in me then put "-" into me
   if me & tKey  >= -20 and me & tKey <= 20 then put tkey after me
   
   if the length of the selection = the length of me then -detects when all chars are selected
      put "" into me
      if tKey = "-" and "-" is not in me then put "-" into me
      if me & tKey  >= -20 and me & tKey <= 20 then put tkey after me
   end if
end KeyDown
Just adorable, no?

Ahem.

Just so you know, there is not much room left in all this to accommodate yet more gadgetry. And I do not think it worthwhile to place the working (duplicated) snippet into its own handler.8)

Craig

Post Reply