Weirdness Passing Messages

Mark Smith mark at
Thu Mar 23 07:23:24 EST 2006

Scratch that - sorry, I'd left the 'go cd' line in...taking it out,   
using 'the target' also fails.

So, to narrow down the problem,

I made a mainstack - stack "mp" with 2 cards. On card 2 there is a  
field "f1" with the script

on showMessage tm
   put tm into me
end show message

I then made a substack - stack "mps", with a button, whose script is

on mouseUp
   put "hello" into tm
   send "showMessage tm" to fld "f1" of cd 2 of stack "mp"
end mouseUp

Now, if cd 2 of stack "mp" is the current cd of stack "mp", on  
clicking the button in stack "mps", I hear a beep, and the word  
'hello' appears in fld "f1". So far so good.

However, if cd 1 is the current card of stack "mp", on clicking the  
button in stack "mps", I hear a beep. I then go to cd 2 of stack  
"mp", and fld "f1" is empty...

Inserting "put tm" into the showMessage handler in fld "f1", I click,  
and "hello" appears in the message box, so the parameter is certainly  
getting there. Then inserting "put the target" into the showMessage  
handler, I click, and "field "f1"" appears in the message box, but  
still fld "f1" is empty.

I'm baffled.


On 23 Mar 2006, at 11:56, Mark Smith wrote:

> I just set up a slightly simpler version of what you've described,  
> and got exactly the same results. I then inserted 'go cd 2 of stack  
> "stackMain" into then putMessage handler, just before the 'send to'  
> line, and it works as desired,
> so it's definitely a context problem. Checking the docs:
> -----
> If the currently executing handler is in the script of the object  
> that received the original message, then me is the same as the  
> object whose name is returned by the target function. For example,  
> suppose a button script contains a mouseDown handler. The value of  
> the target function within that mouseDown handler is the same as  
> the name of me: the name of the button.
> However, if the mouseDown handler is in the card's script instead  
> of the button's, me is not the same as the object specified by the  
> target. In this case, me is the card, but the target function  
> returns the button's name, because the button is the object that  
> first received the mouseDown message.
> ----
> which to my slightly foggy mind suggests that when explicitly  
> 'send' ing a message to an object from another object (overiding  
> the message path) it might be necessary to use 'the target' rather  
> than 'me'..
> so now I've substituted "the target" for "me" in the objects  
> script, and the problem seems to be solved. Does that work for you?
> Mark
> On 23 Mar 2006, at 11:21, David Burgun wrote:
>> Update:
>> I just changed the code so that instead of:
>> put "MessageY" into me
>> It now reads:
>> put "MessageY" into field "FieldY" of group "Y" of card 2 of stack  
>> "/Documents/Test/StackMain.rev"
>> And now the "put" statement works as expected!!!!!!!
>> Can anyone shed some light on this?
>> I really need to refer to the object without hardcoding it's name  
>> into the Script, I thought that was what "me" was for?????
>> Is this a bug? If so is there a workaround??
>> Thanks a lot
>> All the Best
>> Dave
>> Hi,
>> As far as I know (I have asked this question on this list before)  
>> and according to the documentation, "me" always refers to the  
>> object that the script is running in.
>> Are you suggesting I change "me" to "long name of x" just to see  
>> if it makes a difference or in general?
>> If you mean in general, then this will mean that a lot of the  
>> reusability of code that is so good in RunRev will vanish and make  
>> developing Apps MUCH slower. In fact if I have to do this then I  
>> would seriously consider not using RunRev anymore.
>> I have lots of fields that all refer to "me", to change them now  
>> would take forever and result in a lot of hand-tweaking every time  
>> I want to re-use a Group.
>> Here is the problem again, described in simpler terms:
>> 1  StackMain:Card1:ObjectA:mouseUp   - Calls Function  
>> StackUtil:PutMessage("MessageX")
>> 2  StackUtil:PutMessage                             - Calls  
>> Handler StackMain:Card2:ObjectX:MessageX (via send)
>> 3  StackMain:Card2:ObjectX:MessageX - Put "MessageX" into me and  
>> then Calls Function StackUtil:PutMessage("MessageY")
>> 4  StackUtil:PutMessage                            - Calls Handler  
>> StackMain:Card2:ObjectY:MessageY (via send)
>> 5  StackMain:Card2:ObjectY:MessageY - Put "MessageY" into me
>> In this case the "put" statement at step 5 does NOT put "MessageY"  
>> into  StackMain:Card2:ObjectY (the object is unchanged), but the  
>> "put" at step 3 works ok.
>> However, this does work:
>> 1  StackMain:Card2:ObjectX:mouseUp   - Calls Function  
>> StackUtil:PutMessage("MessageY")
>> 2  StackUtil:PutMessage                             - Calls  
>> Handler StackMain:Card2:ObjectY:MessageY (via send)
>> 3  StackMain:Card2:ObjectY:MessageY - Put "MessageY" into me
>> What could be going wrong here? Is it that I am mixing functions  
>> and handlers?
>> How can I test to see if the context is the problem?
>> Any ideas on how to get this working would be greatly appreciated.
>> Thanks a lot
>> All the Best
>> Dave
>> On 23 Mar 2006, at 02:22, Mark Smith wrote:
>>> Is it a context problem?
>>> It might be worth trying to replace
>>> put "MessageY" into me
>>> with
>>> put "MessageY" into <long name of control>
>>> I've always thought that 'me' always referred to the control  
>>> whose script it appears in, but that's an assumption, not   
>>> necessarily a fact...
>>> Mark
>> _______________________________________________
>> use-revolution mailing list
>> use-revolution at
>> Please visit this url to subscribe, unsubscribe and manage your  
>> subscription preferences:

More information about the Use-livecode mailing list