dead click functions
J. Landman Gay
jacque at hyperactivesw.com
Sat Jun 6 21:15:26 CDT 2009
DunbarX at aol.com wrote:
> One button, one field with text in it. I click the button and then click in
> the field.
> Button script:
> on mouseUp
> set cursor to cross
> wait until the mouseClick
> put the clicktext
> end mouseUp
> In HC, one gets data from this and similar text/chunk
> (clickText,clickChunk) functions, even in unlocked fields.
> In Rev, one does not; empty is returned. The functions all work if the
> handler is in the field script though. Something I am missing in the way targets
> operate in Rev?
> However, the clickLoc (and similar types like clickV and clickH) works from
> the button. Why?
The mouseclick function is ephemeral and not always reliable. In HC, the
engine kept a queue of events and always knew when three events happened
sequentially (mouse down, still down, up). MetaCard used to do this
early on and the mouseclick worked about the same way as HC. But
eventually this got in the way of other mouse messages as the language
matured, and Scott Raney started a brief discussion on the MC list about
how to resolve the problem. The upshoot was that the old behavior was
dropped and instead, the engine only checks for a mouseclick (and other
mouse states) at the exact moment the script asks for it. If the
necessary events aren't present in the queue at that precise moment,
nothing is returned.
This is also why checking for a mouseclick inside a repeat loop is a bad
idea, especially in long loops. There's a chance that the loop won't
notice a mouseclick has happened.
There are better ways in Rev to get the same info that the mouse
messages used to get in HC. In this case, a selectionChanged message
would probably do it. On selectionchanged, check the selectedtext, or
the selectedChunk, or the clicktext, or whatever you need to know.
My web page on mouse polling explains some related concepts:
Jacqueline Landman Gay | jacque at hyperactivesw.com
HyperActive Software | http://www.hyperactivesw.com
More information about the use-livecode