Problems with closeField

JonathanC at ag.nsw.gov.au JonathanC at ag.nsw.gov.au
Tue Sep 14 07:39:48 EDT 2004


Dear Wilhelm,

Thank you very much for replying (and especially for making sure I SAW 
your reply, since the Digest mixed up my post).

I, too, had since worked out an exitField version. However, yours is more 
elegant than mine: e.g. using a 'script local variable' rather than a 
global variable. :-)

What I still don't understand (and perhaps you don't either, given your 
comment "This is contrary to what you would expect from the docs") is why 
the field doesn't send a closeField when the contents of the field have 
changed.

Here's the problem, again, in its simplest form:

Create a field with the following script:

on openField
  put empty 
end openField

on keydown k
  if charToNum(k) is among the words of "3 8 9 13 28 29 30 31" 
    then pass keyDown
  put k into selection
end keydown

on closefield 
  put "Field changed."
end closefield

Typing into the field produces completely normal behaviour: arrowkeys, the 
deletekey and backspace key are passed, and everything else is handled by 
the line "put k into selection". But when you click out of the field, NO 
closeField message is sent.

Now delete (or comment out) the keyDown handler. Type into the field and 
click out of it: The message box reports (correctly) that the field has 
changed.

Since HyperCard sends closeField in both situations, I gather that 
Revolution must have its own definition of 'closeField'.
Can anyone from RunRev (or with inside knowledge) confirm this?

Regards,
Jonathan

Jonathan Cooper
Manager of Information / Website
Art Gallery of New South Wales
Sydney, Australia
http://www.artgallery.nsw.gov.au

use-revolution-bounces at lists.runrev.com wrote on 13/09/2004 02:55:37 AM:

> Because the original post got mixed up with the post of Nicholas 
> Thieberger <thien at unimelb.edu.au> (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 ag.nsw.gov.au 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 
> "auto-complete":
> 
> - 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
> <http://www.sanke.org>
> 
> ============================
> 
> P.S.:
> 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 
> keyDown
>   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 
> thisline
>     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
> 
> 
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution


This e-mail message is intended only for the addressee(s) and contains 
information which may be confidential.  If you are not the intended 
recipient please advise the sender by return email, do not use or disclose 
the contents, and delete the message and any attachments from your system. 
 Unless specifically indicated, this email does not constitute formal 
advice or commitment by the sender or the Art Gallery of NSW  (ABN 24 934 
492 575) or its related entities.


More information about the use-livecode mailing list