PDA

Просмотр полной версии : capture mouse right click


AlexDesinger
19.10.2010, 12:54
Всем привет, собственно вопрос в том, возможно ли средствами as3 захватить событие клика правой нопки мыши? Пробовал разные поиски - по-моему сводиться все к тому, чтобы захватить событие через java, но мне этот способ не подойдет, подскажите плз.

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

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/

incvizitor
19.10.2010, 14:33
но мне этот способ не подойдет

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

tsarapkabel
19.10.2010, 14:51
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, вопрос вроде был
...возможно ли средствами as3 захватить событие клика правой нопки мыши?
А про меню там ничего не сказано! :D

incvizitor
19.10.2010, 15:51
@AlexDesinger:

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/flash5/projectorcommands.htm
aka google flash right click projector

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

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

incvizitor
19.10.2010, 16:48
Ну тогда не ясным остаёться только сделать то же самое на станицах где нет js для правого клика (например vkontakte).

Добавлено через 3 часа 9 минут
@AlexDesinger, разве обычный MouseEvent не отлавливает только самый верхний объект под мышой? Положите на сцену объект (назовём "objA"), на него сверху объект (назовём "objB"). Вот и попробуйте кликнуть objA, в месте где он перекрыт оbjB (без выставления mouseEnabled и прочего).