Просмотр полной версии : capture mouse right click
AlexDesinger
19.10.2010, 12:54
Всем привет, собственно вопрос в том, возможно ли средствами as3 захватить событие клика правой нопки мыши? Пробовал разные поиски - по-моему сводиться все к тому, чтобы захватить событие через java, но мне этот способ не подойдет, подскажите плз.
Можно. Когда вылазит менюшка с сеттингами, то диспатчится ивент что она вылезла. Я его слушаю в своем компоненте. А поскольку она вылазит только на клик правой кнопкой, то можно взять еще маусХ и маусУ и можно генерить полноценный райт клик ивент (унаследовал его от маус ивент).
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 то (только при первом трэйсе) меню исчезнет. Может быть есть еще что-то что может спрятать его, но это вне предела моих знаний.
Так и говорили бы, что локально.
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 и прочего).
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.