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