Actionscript 3 ContextMenu затворено събитие?

Има събитие, което се изпраща, когато контекстното меню (меню с десен бутон) в actionscript за 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