Событие Actionscript 3 ContextMenu закрыто?

Существует событие, которое отправляется при открытии контекстного меню (меню правой кнопки мыши) в сценарии действий для flash:

ContextMenuEvent.MENU_SELECT

Теперь, есть ли событие, которое отправляется, когда меню закрыто?


person Tom    schedule 03.09.2009    source источник


Ответы (1)


Хороший вопрос. Это было бы хорошим запросом функции, событием ContextMenuEvent.MENU_CLOSED :)

Я думаю, что у меня есть половина вашего ответа. Вот моя идея:

var myContextMenu:ContextMenu = new ContextMenu();
var menuLabel:String = "Custom Item";
var rightClicking:Boolean;

addCustomMenuItems();
myContextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, menuSelectHandler);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseUpHandler);
    var redRectangle = makeRedRectangle();
    redRectangle.contextMenu = myContextMenu;


function makeRedRectangle():Sprite{
    redRectangle = new Sprite();
    redRectangle.graphics.beginFill(0x990000,.2);
    redRectangle.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
    redRectangle.mouseChildren = false;
    addChild(redRectangle);
    return redRectangle;
}

function addCustomMenuItems():void {
    myContextMenu.hideBuiltInItems();
     var item:ContextMenuItem = new ContextMenuItem(menuLabel);
     myContextMenu.customItems.push(item);
     item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, menuItemSelectHandler);
}

function menuSelectHandler(event:ContextMenuEvent):void {
     trace("menuSelectHandler: " + event);
     rightClicking = true;
}

function menuItemSelectHandler(event:ContextMenuEvent):void {
     trace("menuItemSelectHandler: " + event);
}

function mouseUpHandler(event:MouseEvent):void{
    if(rightClicking){
        trace('ContextMenu Closed\nThank You! Come Again!');
        rightClicking = false;
    }
}

По сути, я создаю спрайт, который находится поверх всего, но для mouseChildren установлено значение false, поэтому клипы под ним могут получать клики. Возможно, вы захотите, чтобы этот был прозрачным. Я использовал это, чтобы вы получали событие, когда щелкаете правой кнопкой мыши по нему. Когда это происходит, я устанавливаю для параметра rightClicking значение true, что означает, что я знаю, что был нажат правый щелчок, и просто жду, когда произойдет что-то еще. Есть два варианта:

  1. Пользователь выбирает элемент из меню.
  2. Пользователь щелкает, чтобы меню исчезло.

Для варианта 1, если пользователь выбирает любой из ваших пользовательских элементов, это круто, вы можете справиться с этим, если нет, по крайней мере, вы знаете, что может произойти. Для варианта 2 я настроил прослушиватель для события MOUSE_DOWN, поэтому, если правый щелчок был включен, и вы нажали кнопку мыши, это закроет ваше меню.

Надеюсь это поможет!

Я знаю, это похоже на халтурный олдскульный as2, и код изменен из примера документации, но это мысль :)

person George Profenza    schedule 03.09.2009