Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   capture mouse right click (http://www.flasher.ru/forum/showthread.php?t=145772)

AlexDesinger 19.10.2010 12:54

capture mouse right click
 
Всем привет, собственно вопрос в том, возможно ли средствами as3 захватить событие клика правой нопки мыши? Пробовал разные поиски - по-моему сводиться все к тому, чтобы захватить событие через java, но мне этот способ не подойдет, подскажите плз.

vapes 19.10.2010 14:00

Можно. Когда вылазит менюшка с сеттингами, то диспатчится ивент что она вылезла. Я его слушаю в своем компоненте. А поскольку она вылазит только на клик правой кнопкой, то можно взять еще маусХ и маусУ и можно генерить полноценный райт клик ивент (унаследовал его от маус ивент).

http://www.adobe.com/livedocs/flash/...riptLangRefV3/

incvizitor 19.10.2010 14:33

Цитата:

но мне этот способ не подойдет
Структура сайта запрещает? Или просто не удобно?

tsarapkabel 19.10.2010 14:51

Код AS3:

var cMenu:ContextMenu = new ContextMenu();
this.contextMenu = cMenu;
 
cMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler, false, 0, true);
 
function menuSelectHandler(event:ContextMenuEvent):void {
    trace("правый клик");
}


incvizitor 19.10.2010 15:07

tsarapkabel, и вверху страницы надо еще написать: "НЕ ОБРАЩАЙТЕ ВНИМАНИЕ НА ОТКРЫВАЮЩЕЕСЯ ОКНО".

AlexDesinger 19.10.2010 15:20

Цитата:

Можно. Когда вылазит менюшка с сеттингами, то диспатчится ивент что она вылезла
Оооу =)

Цитата:

Структура сайта запрещает? Или просто не удобно?
к сожалению это приложение для локального исполнения, и то будет интегрировано в другое)).

да, но я смогу прослушать только глобально, прослушать от определенного объекта видимо не получиться, так?

tsarapkabel 19.10.2010 15:41

incvizitor, вопрос вроде был
Цитата:

Сообщение от AlexDesinger (Сообщение 943727)
...возможно ли средствами as3 захватить событие клика правой нопки мыши?

А про меню там ничего не сказано! :D

incvizitor 19.10.2010 15:51

@AlexDesinger:

Код AS3:

package vaukalak.utils 
{
    import flash.display.DisplayObject;
    import flash.display.InteractiveObject;
    import flash.display.Stage;
    import flash.events.Event;
    import flash.external.ExternalInterface;
    import flash.geom.Point;
 
    /**
    * ...
    * @author vaukalak
    */

    public class RightMouseEvent extends Event
    {
 
        public static const CLICK:String = "Right Click";
        private static var _stage:Stage;
 
        //переопределения класса Event
 
        public function RightMouseEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            super(type, bubbles, cancelable);
        }
 
        public override function clone():Event
        {
            return new RightMouseEvent(type, bubbles, cancelable);
        }
 
        public override function toString():String
        {
            return formatToString("RightMouseEvent", "type", "bubbles", "cancelable", "eventPhase");
        }
 
        //в метод enable нужно передать объект stage
 
        public static function enable(stage:Stage):void {
            _stage = stage;
            ExternalInterface.addCallback("rightClick", _onRightClick);
        }
 
        //метод _onRightClick отыскивает непосредственно верхний объект под мышой, и приказывает объекту распространить событие
 
        private static function _onRightClick():void {
            var objs:Array = _stage.getObjectsUnderPoint(new Point(_stage.mouseX, _stage.mouseY));
            (objs[objs.length-1] as DisplayObject).dispatchEvent(new RightMouseEvent(RightMouseEvent.CLICK,true));
        }
 
    }
 
}

Вот этот класс я написал для браузерных версий. По сути Вам нужно посмотреть только метод "_onRightClick". В flash IDE Если на ContextMenuEvent делать trace то (только при первом трэйсе) меню исчезнет. Может быть есть еще что-то что может спрятать его, но это вне предела моих знаний.

-De- 19.10.2010 15:51

Так и говорили бы, что локально.
Disabling Menu on Right-Click:
To disable the Flash menu that appears when you right-click on a projector, use the following syntax:

fscommand("showmenu", "false");
(с) http://www.kirupa.com/developer/flas...orcommands.htm
aka google flash right click projector

AlexDesinger 19.10.2010 16:44

incvizitor, класс, я пожалую запишу себе этот клас на будущее, думаю только его можнно доработать до того, чтобы заставлять генерировать событие не самый верхний объект под мышкой, а какой нть определенный, естественно если он под мышкой)))

всем спасибо огромное, я сделал правда попроще)))
просто сохранил объект который генерирует событие MouseOver в момент нажатия правой кнопки, и вызвал нужную мне функцию)))


Часовой пояс GMT +4, время: 10:02.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.