Problems with closeField

Wilhelm Sanke sanke at
Sun Sep 12 12:55:37 EDT 2004

Because the original post got mixed up with the post of Nicholas 
Thieberger <thien at> (Subject: Re: use-revolution Digest, 
Vol 12, Issue 45) in the digest version and was therefore not noticable 
for Jonathan Cooper by subject, I re-post my message from this morning 
and add the new script.

On Tue, 7 Sep 2004, JonathanC at wrote:

> I can't believe I'm having a problem with something as simple as
> "closeField"!
> I have a field which works like the Address bar of Internet Explorer. 
> When
> you start typing into it, it tries to finish the word or phrase, 
> according
> to a list in a separate field (which will eventually be hidden). If you
> end up typing a NEW word or phrase, you are asked if you would like this
> added to the list, for next time. I got it to work fine in HyperCard, but
> I'm stumped by the strange behaviour of "closeField".

Hi Jonathan,

Finally I managed to take a look at your sample stack; sorry for the delay.

After some experimenting I changed three things in the script of fld 

- 1. I changed the "closefield" handler to a "exitfield"

This is contrary to what you would expect from the docs

(closefield = the field's content has changed
exitfield = the contents of the field have not changed),

but it seems to work.

- 2. I intercepted the "Cancel" message of the modal dialog which now 
sets a variable ("ControlVar") to false - to avoid the modal dialog to 
be repeated again and again

- 3. I declared a local var in the first line of the field script and 
set "ControlVar" to true at the beginning of the "keydown" handler

This seems to solve your  immediate problems as you stated them. There 
are probably a number possibilities to refine and enhance your 
auto-complete routines.

Best regards,

Wilhelm Sanke


New script of field "auto-complete" of your stack "CloseField problem":

local ControlVar
on keydown k
  put true into ControlVar
  global autoCompleteList
  if autoCompleteList = "" then pass keyDown
  if " " & charToNum(k) & " " is in " 3 8 9 13 28 29 30 31 " then pass 
  put k into selection
  put me into what
  if what="" then pass keydown
  get offset(return & what,return & autoCompleteList)
  if it>0 then
    put the number of lines in (char 1 to it of autoCompleteList) into 
    put line thisline of autoCompleteList into me
    select char length(what)+1 to length(me) of me
  end if
end keydown

on openField
  put empty into fld "Message"
  -- pass openField
end openField

on exitfield
  put "Field changed." into fld "Message"
  global autoCompleteList
  put me into temp
  if controlVar is true then
  if temp <> "" and not (temp is among the lines of autoCompleteList) then
    answer "Add" && quote & temp & quote && "to auto-complete list?" \
        with "Cancel" or "OK"
    if it = "OK" then
      if last char of autoCompleteList <> return and the length of 
autoCompleteList > 0 then put return before temp
      put temp after autoCompleteList
      put autoCompleteList into fld "Auto-complete list"
    else if it is "Cancel" then
      put false into controlVar
      end if
  end if
  end if
  pass exitfield
end exitfield

More information about the use-livecode mailing list