Jacque, could you please clarify this? What's the difference between
happening and being acted on? If Rev loses messages, I'd like to
understand, so I don't write code that's likely to fail and that
cannot be
debugged.
-- Dick
Got a discussion on this with Mark on chatrev a fortnight ago... is
this part of the dialogue any related to your question? (see the 2
buttons situation below)
Marielle: I tried creating a stack. One button.
Marielle: Button script:
Marielle: on mouseup .... lock messages ... answer "hi" ... end
mouseup
Marielle: if I click over and over again on the button, I get to
see the dialog box
Mark: of course, because lock messages doesn't stop the running
handler
Mark: it only stops messages from being sent and thus prevents
"new" handlers from being run
Marielle: not the current one. But if I am supposed to put xtalk in
a "I don't listen" mode, then this wouldn't work the second time.
Mark: no, because messages are unlocked as soon as all handlers
have finished running
Mark: d.w.z. all handlers that are called by the currently running
handler
Marielle: okay
Marielle: so that's just temporary.
Marielle: okay, two buttons. First one, on mouseup ... answer
"hi"... end mouseup
Marielle: second one, on mouseup .... set the lockmessages to
true ... send mouseup to button 1 ... end mouseup
Marielle: I still see the dialog box
Mark: do you mean, you see the dialog box twice?
Mark: oh, two buttons
Mark: ok
Marielle: but if I send "click at the loc of button 1" then I don't
see it.
Mark: so, that's normal, because you are calling a handler from an
already running handler
Mark: right, because "click" makes the engine send the message
Mark: and lock messages prevents the engine from sending these
messages
Marielle: okay, I start to understand better
Marielle: lock messages prevent messages triggered by onscreen
events from being listened to (forwarded is probably more exact)
Marielle: flush events gets these messages created...accumulate
them.... then trash them.
Mark: more exact would be to say that lock messages prevents the
engine from sending the messages, while you can still "send" them
yourself
Marielle: yes, that's what I mean by "onscreen" events
Marielle: (messages that are the results of user actions)
Mark: flush events doesn't accumulate any messages, it just trashes
messages if they are waiting at that particular moment
Mark: "waiting" meaning that they are in the queue
Marielle: so messages get processed as they arrive. If messages
haven't been processed yet, they get trashed?
Mark: sorry, in what kind of situation?
Marielle: generic case (abstract level).... let's try to come up
with a situation.
Marielle: I have a button. On click triggers a process that takes a
few computer cycles.
Marielle: I have a user with problems who just decided to bang his
head on the keyboard. That slow process is triggered again and again.
Marielle: the engine will do its best to process all request.
Marielle: but a flushevents will just tell it "forget about it",
ignore all other requests in the queue?
Marielle: is it something like this?
I paste below the rest the dialog, relevant to these issues, below
this reveals my abysmal lack of mastery of any advanced concept.
I would be keen as well to have a good explanation on messages, when
they can be skipped or left in the queue or discarded. flushevents vs
lockmessages, when to use them, how to use them, etc.
Marielle: related question. Lock messages... what is it for exactly?
[...]
Mark: lock messages just stops all messages from being sent
Mark: all of them
Mark: but the handler that is running keeps running of course
Marielle: it's just that calls to any other handlers are not made
anymore?
Mark: no
Mark: I didn't say calls
Mark: I said messages that are being sent
Mark: you can still call handlers from another handler
Marielle: so, what are messages exactly. UI events?
Marielle: what's the difference between a user clicking on the
screen and doing "send mouseup" from within a script?
Marielle: (I mean if lockmessages is set to true)
Mark: the difference is that if the user clicks on the screen, it
is the engine that sends a new message
Marielle: but lockmessages will have the same effect on both?
Marielle: That engine part, newbies like me never had a chance to
understand how this works.
Mark: I believe that the messages invoked by "send" will run
immediately
Mark: that's just another way to call a handler
Marielle: so, though you use the word "message", it will be "sent"
despite the fact lockmessages is set to true?
Mark: yes, and yes it is logical ;-)
Marielle: sure! Logical.
Marielle: so if lockmessages doesn't prevent messages from being
sent, what does it do?
Marielle: What is a "message", by the way?
Mark: a message is what makes handlers run
Mark: but they can be sent from another handler or by the engine
Marielle: what triggers them?
Mark: and lockmessages prevents the engine from sending them
Marielle: how is message <> event?
Mark: no events in xtalk languages
Mark: we dont' call them events
Marielle: so a message is the same as what others call events?
Marielle: events -> message -> handler.
Marielle: the logic would be that you can't block events (they are
things that the user do on the screen)
Mark: I don't know, I don't know how other people define event
Marielle: but in xtalk, you can block messages.
Mark: I don't know what" things that user do" are
Mark: yes you can
Marielle: "things" = madly clicking all over the place with the mouse
Mark: eventually, messages are sent as a result of user input,
including opening the programme
Marielle: a mousedown is what I do with my mouse. xTalk cannot stop
me from doing it.
Marielle: but xtalk can choose not to listen
Mark: yes, if a user clicks with the mouse madly, there is user
input and messages are being sent, unless you lock messages
Marielle: how long does the lock messages remain active? within the
handler it is in?
Marielle: is it like itemdel, where the value is put back to the
default one when the handler exits?
[part above]
Mark: well, you'd have to flush many different messages
Mark: maybe that command should have been called flushMessages :-)
Marielle: :-D
Mark: you'd have to flush keydown, rawkeydown, commandkeydown, and
many more messages
Marielle: flushEvents("all")
Marielle: okay, so again the doc is incomplete. I can flush more
events than listed there.
Marielle: I could flush something specific like a commandkeydown?
Mark: you can flush any message
Mark: and I wouldn't expect the docs to list every single message
Marielle: Although some of the eventTypes have the same names as
built-in Transcript messages, there is a distinction. For example,
the mouseDown event type is the operating system's response to the
user clicking the mouse button. When the operating system sends
this event to the application, Revolution sends a mouseDown message
to the target object. The expression flushEvents(mouseDown)
prevents the application from responding to any mouseDown events it
has received from the operating system, but has not yet processed.
Mark: let me have a look myself
Mark: I see they give a list of events
Mark: yes :-D
Mark: so, according to the docs, only particular events can be
flushed, I didn't know that
Mark: after all, I used this only once
Marielle: that's what the doc says. But it wouldn't be the first
time that what it says is not what it does.
Mark: the docs may be right, give it a try
Mark: do a repeat loop for a few seconds, then try flushEvents
("mouseMove")
Marielle: yeah, I was gonna write that mousemove is the easiest
case to test
Mark: see if your mouseMove handler runs, if you put it in a field
and move over that field while the repeat loop is running
Mark: yup
Marielle: okay, will give it a try.
Marielle: thanks... I start to get a better idea of what I need to
do to try and understand ;-)
Mark: great
Marielle: so this is revolution genius bar?
Mark: nah
Mark: not necessarily
Best,
Marielle
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution