numeric field
    Jan Schenkel 
    janschenkel at yahoo.com
       
    Thu Oct 10 05:54:03 EDT 2002
    
    
  
--- mark mitchell <cowhead at mac.com> wrote:
> 
> Jan wrote:
> 
> > Example: if you want a field that only accepts
> numeric
> > input, here's what you would do:
> >
> > 1) Java: create a new subclass JNumericField of
> > JTextField (i don't have my books at hand right
> now,
> > so it could be a different class) and make it so
> that
> > it only accepts numeric input. Then, whenever you
> need
> > a numeric field, you make an instance of that
> class.
> >
> > 2) RunRev: look at the use-revolution archive and
> copy
> > the script I posted a week or so ago ;-)
> >
> 
> I was too busy when you posted that, but I didn't
> understand why a very 
> simple script doesn't work for this.  I use this in
> a field script if I 
> want to restrict it to numeric input:
> 
> on keydown whichKey
>    if whichKey is a number then
>      pass keyDown
>    end if
> end keydown
> 
> It works fine.  What was the point of that long
> winded thing?
> 
> mark mitchell
> Japan
> 
Hi Mark,
The additional code covers several things:
1) if the user "pastes" data, you don't get a keydown
-- so you need a special construction to handle the
pasteKey (which, for additional fun, isn't sent when
the RunRev UI is running).
2) if you want to enable the user to type a decimal
number, you have to keep track of how many times he
typed a period -- so you have to keep an eye on
selections, and check if the new data after the
keyDown would still be a number.
3) if the data must be displayed in a format with
thousand separators or a comma instead of a point, you
need functions to convert back and forth between
display and calculation format.
On another note, I also checked my theory on using the
"insert script into front" construct; and the results
are very good.
- In the script mentioned above, replace 'me' with
'the target' or 'the text of the target' where needed.
- Put that script in a field "NumericInputOnly" in a
library stack named "myScriptLibrary".
- Change the code of any field you want to only accept
numeric input to:
  on openField
    insert script of field "NumericInputOnly" of \
      stack "myScriptLibrary" into front
  end openField
  on closeField
    remove script of field "NumericInputOnly" of \
      stack "myScriptLibrary" from front
  end closeField
- Incidentally, you could also have a backScript
somewhere that checks a fields 'uFieldFormat' custom
property and does the above transparently:
  on openField
    put the uFieldFormat of the target into \
      tFieldFormat
    switch tFieldFormat
    case "numeric"
      insert script of field "NumericInputOnly" of \
        stack "myScriptLibrary" into front
      break
    case "date"
      insert script of field "DateInputOnly" of \
        stack "myScriptLibrary" into front
      break
    -- insert other types of input here...
    default
      break
    end switch
    pass openField
  end openField
  on closeField
    put the uFieldFormat of the target into \
      tFieldFormat
    switch tFieldFormat
    case "numeric"
      remove script of field "NumericInputOnly" of \
        stack "myScriptLibrary" from front
      break
    case "date"
      remove script of field "DateInputOnly" of \
        stack "myScriptLibrary" from front
      break
    -- insert other types of input here...
    default
      break
    end switch
    pass closeField
  end closeField
As I promised before, I will wrap all this in a
template fields stack when I find the time.
Hope this cleared a few things up,
Jan Schenkel.
=====
"As we grow older, we grow both wiser and more foolish at the same time."  (La Rochefoucauld)
__________________________________________________
Do you Yahoo!?
Faith Hill - Exclusive Performances, Videos & More
http://faith.yahoo.com
    
    
More information about the use-livecode
mailing list