Weirdness Passing Messages

Mark Smith mark at maseurope.net
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
   beep
   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.

Mark


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 lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your  
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-revolution
>




More information about the Use-livecode mailing list