Tony, I had a similar problem in Flex 1.5 with a custom TitleWindow
component that was receiving events from objects underneath it.
Never did find out exactly why that was happening; non-100% alpha
value, perhaps? Anyway, I solved it by wrapping a simple check
around the event handler that makes sure the target property of the
event is the current object:
if (event.target == this) { // handle the event... }
It might be worth trying that somewhere, like in a delegate for the
mouseMove event or in handleEvent().
Hope that's of some help.
Doug
--- In [email protected], "Tony Pujals" <[EMAIL PROTECTED]> wrote:
>
> Well, the Flash asdocs really don't make this clear, but I
initially had a suspicion that overriding a handler instead of
registering a listener might be the answer. I didn't pursue that
direction right away because the method signatures don't return a
Boolean or some other value to indicate that an event was handled
and no further processing is wanted.
>
> In any case, I was able to achieve the glass pane effect that I
wanted this morning with the following code:
>
>
> options = { width: "100%", height: "100%"};
> Canvas(createChild(Canvas, "_glassPane", options));
> _glassPane.setStyle("backgroundColor", "#FF00FF");
> _glassPane.alpha = 0;
> _glassPane.visible = false;
>
> MovieClip(_glassPane).onPress = function() {}
>
>
> All of the above was required: without a backgroundColor being
set, events weren't captured at all; The alpha, of course, was to
make the glass pane actually invisible (there maybe other properties
beside backgroundColor that also work for causing events to get
caught, but I haven't experimented). The visible property -- once a
backgroundColor property is set -- is what enables and disables the
event capturing.
>
>
> However, for the toolbar that I also wanted to capture events so
the text component below doesn't receive them, this is not yet a
complete solution because it also prevents the child components (the
toolbar buttons) from getting any events either. I've written some
code to iterate the child components, but I don't know what to pass
to them -- it seems intrinsically wrong that the toolbar needs to
become an event manager from its onPress handler:
>
> // doesn't work -- onPress doesn't have event parameter anyway...
>
> MovieClip(this).onPress = mx.utils.Delegate.create(this, function
(event) {
> var comp : UIObject = null;
> for (var i : Number = 0; i < childDescriptors.length; i++) {
> comp = getChildAt(i);
> if (hitTest(comp)) {
> comp.handleEvent(event);
> }
> }
> });
>
> (Incidentally, if there is some other more appropriate way for
iterating child components, I'd appreciate hearing about it).
>
> So Flash/Flex gurus ... what am I missing here...? Thanks!
>
> Tony
>
> tony pujals| senior engineer | Yahoo! SiteBuilder Express
> p. 408.349.6284 | e. tonyp * yahoo-inc . com | y!id tonypujals
>
> ________________________________________
> From: Tony Pujals
> Sent: Wednesday, February 15, 2006 7:43 AM
> To: '[email protected]'
> Subject: RE: [flexcoders] Mouse Event Filtering
>
> Sorry, I don't know if this works in the Flex 2 beta, but I should
have specified that we're working with Flex 1.5 at Yahoo.
Unfortunately, EventDispatcher states:
>
> function addEventListener(eventType:String,
eventListener):Void
> {
> // Note: In the future, we may add
a third parameter,
> // useCapture:Boolean, to be
compliant with the
> // DOM Level 3 Events spec,
> // http://www.w3.org/TR/DOM-Level-
3-Events/events.html.
> .
> .
> .
>
> This would have been very convenient if it were implemented.
Nevertheless, Button and other components do seem able to capture
the event. Is this a question for one of the Flash lists (any
recommendation to which list I should post this question)?
>
> Thanks, Matt - if you or anyone else has any other ideas, I'd
really love to hear them
>
> -Tony
>
>
>
> tony pujals| senior engineer | Yahoo! SiteBuilder Express
> p. 408.349.6284 | e. tonyp * yahoo-inc . com | y!id tonypujals
> ________________________________________
> From: [email protected]
[mailto:[EMAIL PROTECTED] On Behalf Of Matt Chotin
> Sent: Tuesday, February 14, 2006 9:45 PM
> To: [email protected]
> Subject: RE: [flexcoders] Mouse Event Filtering
>
> you want to add your mouse event listener with useCapture set to
true
> and then call stopPropagation on the event in your handler (I
think). I
> believe that will prevent it from moving further down the
hierarchy.
>
> -----Original Message-----
> From: [email protected]
[mailto:[EMAIL PROTECTED] On
> Behalf Of Tony Pujals
> Sent: Tuesday, February 14, 2006 5:27 PM
> To: [email protected]
> Subject: [flexcoders] Mouse Event Filtering
>
> There are two variations to my question, but they should share a
common
> solution:
>
> 1) I want to create a "glass pane" - ie, a transparent layer that
can
> capture/consume mouse events without allowing the event to bubble
to a
> component below it. I've tried to achieve this effect with a
transparent
> Canvas, but the component below it (eg, a TextArea), also catches
the
> event.
>
> 2) I have a floating toolbar that extends Canvas. I don't want to
use
> the PopUpManager because of issues with the FocusManager and
TextArea
> that causes text to be selected incorrectly when focus is returned
after
> focus was transferred to a toolbar button. If the toolbar is
floating
> above the TextArea component, the cursor changes to an ibeam. If I
click
> down on the toolbar to drag it, the toolbar drags, but the
TextArea also
> gets the events, causing text to become selected. I want the
toolbar to
> consume the mouse events occurring on it without any further event
> bubbling.
>
>
> Since the toolbar has a mouseMove handler that allows me to drag
it, I
> can drag even by pressing mouse down on a toolbar button. I guess
the
> toolbar as parent is receiving and handling the mousedown, even
though
> the mouse down event is also propagating to its child button
component
> as well (I actually do not want this behavior either, but I
suppose I
> can solve this easily enough with hitTest). But what is really
> interesting is that the event stops there if it's caught by the
button
> -- the TextArea below the toolbar doesn't get the event in this
case. So
> something about a Button or its superclasses makes it special, but
the
> difference isn't apparent to me in the AS source provided with
Flex.
>
> Any insight is appreciated. Thanks!
>
> -Tony
>
>
>
> tony pujals| senior engineer | Yahoo! SiteBuilder Express
> p. 408.349.6284 | e. tonyp * yahoo-inc . com | y!id tonypujals
>
>
>
>
>
> --
> Flexcoders Mailing List
> FAQ:
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives:
> http://www.mail-archive.com/flexcoders%40yahoogroups.com
> Yahoo! Groups Links
>
>
>
>
>
>
>
>
>
> --
> Flexcoders Mailing List
> FAQ:
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> Search Archives: http://www.mail-archive.com/flexcoders%
40yahoogroups.com
>
> SPONSORED LINKS
> Web site design development
> Computer software development
> Software design and development
> Macromedia flex
> Software development best practice
>
>
> ________________________________________
> YAHOO! GROUPS LINKS
>
> * Visit your group "flexcoders" on the web.
>
> * To unsubscribe from this group, send an email to:
> [EMAIL PROTECTED]
>
> * Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service.
>
> ________________________________________
>
--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
<*> To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/