Jim Lambert wrote:

> Make a group that is smaller than your card.
> Place this in the group’s script:
>    on mousemove newMouseH, newMouseV
>            put newMouseH, newMouseV
>    end mousemove
>
> When the cursor moves around within the group the current mouseLoc is
> put into the message box. When the cursor moves outside of the group
> the mouseloc is no longer placed into the message box.
>
> Next set the backgroundBehaviour of the group to TRUE.
>
> Now wherever the cursor is within the CARD the mouseLoc is placed in
> the message box regardless of whether the cursor is within or without
> the rect of the group.
>
> The dictionary states, "The mouseMove message is sent to the control
> the mouse pointer is over, or to the card if no control is under the
> mouse pointer.”
>
> It is true that a background group is not 'officially' on a card
> (rather it’s on the background in HyperCard parlance.) But why would
> the mousemove message get passed to the card when the mouse is
> outside of the background group containing that handler?
>
> Is this a bug or expected behavior?

You've been working with LiveCode too long, and have forgotten the semantic roots of the ancient mother tongue. :)

In HC there was only one background on any given card, it was always present, and it filled the card. All messages passed from the card to the background before moving on to the stack.

In LiveCode, groups by default act as controls, and their message handling works as you expect, in visual layer order, responding only to messages that occur in objects contained within the group.

But when you set the backgroundBehavior of a group to true, you're telling LC to act like HC: that group's script then occupies a different place in the message path, between the card and the stack, so that it can deliver what a ported HyperCard stack would expect.

This becomes clearer if you modify your recipe script:

on mousemove newMouseH, newMouseV
   put the name of the target, newMouseH, newMouseV &cr after message
end mousemove

With that you can observe behavioral differences between moving the mouse when the group's backgroundBehavior is true and when that's set to false.

When the backgroundBehavior is false, of course the only target is the control within the group, and that's the only target identified in the list growing in the Message Box.

But when true, you'll see a mix of objects, sometimes the control in the group and sometimes the card, depending on whether the mouse is within the control.

This becomes even more evident if you modify the recipe script to include "me", and pass the message, and then copy that to both the card and stack scripts:

on mousemove newMouseH, newMouseV
   put the name of me && the name of the target, newMouseH, newMouseV \
     &cr after message
   pass mouseMove
end mousemove


TL;DR: Don't go out of your way to use a property designed for HyperCard compatibility and you'll remain in the more flexible and sometimes more predictable LiveCode paradigms. :)

--
 Richard Gaskin
 Fourth World Systems
 Software Design and Development for the Desktop, Mobile, and the Web
 ____________________________________________________________________
 ambassa...@fourthworld.com                http://www.FourthWorld.com

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to