Modificar el menú contextual (botón derecho) con Actionscript 3.0

Modificar el menú contextual (botón derecho) con Actionscript 3.0

Etiquetas: ContextMenu ContextMenuItem

Modificar el menú contextual (botón derecho) con Actionscript 3.0

Actualización: 23-02-2011
Como se indica en los comentarios, faltaba una linea para especificar a que objeto asignamos el menú. Actualizo el post, gracias el aviso!

Desde Actionscript podemos modificar los elementos del menú que aparece al pulsar sobre nuestra película con el botón derecho.

Para cambiar el menú, podemos seguir estos pasos:

-Crear una variable de tipo ContextMenu:

  1. var menuDTRK:ContextMenu = new ContextMenu();

-Crear los elementos que vamos a añadir al menú. Estos elementos son de tipo ContextMenuItem, y el constructor recibe como parámetro el texto que vá a aparecer en el menú (hay otros 3 parámetros opcionales):

  1. var quienes:ContextMenuItem = new ContextMenuItem("QUIENES SOMOS");
  2. var trabajos:ContextMenuItem = new ContextMenuItem("TRABAJOS");

-Añadir los elementos que hemos creado al menú:

  1. menuDTRK.customItems.push(quienes, trabajos);

-Poner listeners a los elementos del menú que hemos creado. Es decir, hemos creado las variables "quienes" y "trabajos", las hemos puesto en el menú, y ahora tenemos que decir que pasa cuando el usuario clica en ellas:

  1. quienes.addEventListener( ContextMenuEvent.MENU_ITEM_SELECT, quienesSelect);
  2. trabajos.addEventListener( ContextMenuEvent.MENU_ITEM_SELECT, trabajosSelect);
  3.  

-Crear las funciones que hemos dicho que se van a ejecutar. En este caso lo que yo hago es llamar a una función para cargar un archivo:

  1. function quienesSelect(e:Event):void {
  2. 	cargarContenido("swf/quienes.swf")
  3. }
  4.  
  5. function trabajosSelect(e:Event):void {
  6. 	cargarContenido("swf/galeria_dtrk.swf")
  7. }

-Indicar para que objeto queremos utilizar ese menú. Puede ser un MovieClip en particular o toda la película. Por ejemplo si estamos en el main:

  1. contextMenu = menuDTRK;

Otra opción que tenemos, es eliminar los elementos que vienen por defecto en el menú contextual (se eliminan todos menos "Configuración" y "Acerca de..."):

  1. menuDTRK.hideBuiltInItems();
Comentarios
    • Autor
    • Alfredo
    Exelente la claridad de la explicacion. Para recomendar.
    • Autor
    • Iván Gajate
    Está guay solo aportar que hay un límite de 15 elementos personalizados en el menú contextual. Si pones mas, no se ven y no te da error :(
    • Autor
    • Iktwo
    Pues soy un novato en esto, pero no me funcionó, no se que estoy haciendo mal.. escribí esto: var menu:ContextMenu = new ContextMenu(); var menuItem1:ContextMenuItem = new ContextMenuItem("TEST"); var menuItem2:ContextMenuItem = new ContextMenuItem("TEST"); menu.hideBuiltInItems(); menu.customItems.push(menuItem1, menuItem2); y no me oculta ni agrega los nuevos..
    • Autor
    • Iktwo
    Pues soy un novato en esto, pero no me funcionó, no se que estoy haciendo mal.. escribí esto: var menu:ContextMenu = new ContextMenu(); var menuItem1:ContextMenuItem = new ContextMenuItem("TEST"); var menuItem2:ContextMenuItem = new ContextMenuItem("TEST"); menu.hideBuiltInItems(); menu.customItems.push(menuItem1, menuItem2); y no me oculta ni agrega los nuevos..
    • Autor
    • Javier
    Ami me pasa lo mismo que Iktwo, nose si tendremos que poner algo mas o cambio o falta algo, espero alguien pueda resolver esto, estoy usando CS4 con as3.0
    • Autor
    • Javier
    Porcierto creo que te falto el metodo cargarContenido(); en tus funciones no lo pusiste, aun asi no logro hacer lo que tu dices haciendo mi propio metodo jejeje
    • Autor
    • Javier
    var my_menu:ContextMenu = new ContextMenu(); my_menu.hideBuiltInItems(); var quienes = new ContextMenuItem("QUIENES SOMOS"); var trabajos = new ContextMenuItem("TRABAJOS"); quienes.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, quienesSelect); trabajos.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, trabajosSelect); function quienesSelect(e:Event):void { //cargarContenido("pr.swf") trace("Entro en quienes..."); //Codigo para el evento 2 } function trabajosSelect(e:Event):void { trace("Entro en trabajos..."); //Codigo para el evento 2 } my_menu.customItems.push(quienes, trabajos); contextMenu = my_menu;
    • Autor
    • Alejandro
    No funciona tal cuál está explicado, he checado otros tutoriales y tampoco, hay un paso que se está omitiendo.
    • Autor
    • Alejandro
    Lo que es no leer bien el título, quiza el error sea haber trabajado esto en AS2.0 y no en 3.0 como dice.
    • Autor
    • Alejandro
    nop... aun así nada
    • Autor
    • killton
    Sucede que al vato se le olvidó añadir el menu al objeto en cuestión por ejemplo: Si quieres que el movieClip tenga el menu entonces debes agregarlo: var cm:ContextMenu = new ContextMenu(); cm = new ContextMenu(); cm.hideBuiltInItems(); var cmi:ContextMenuItem ; cmi = new ContextMenuItem("Mi item"); cmi.addEventListener (ContextMenuEvent.MENU_ITEM_SELECT, miFuncionMenu); cm.customItems.push(cmi); mc.contextMenu = cm; //donde mc es el objeto al cual le quieres agregar el menu contextual
    • Autor
    • chaparral
    Hola, será que este código funciona en Actionscript 2.0, o hay otra forma de hacerlo?
    • Autor
    • César
    Funciona a la perfección con las mejoras de Killton. Faltaba añadir el menú al objeto en cuestión. En el caso de añadirlo al escenario principal se puede decir esto: this.contextMenu = cm;
    • Autor
    • John
    Works great!! Thanks Javier!!
    • Autor
    • neo
    como funciona esto, ya esta corregido el error arriba o no.
    • Autor
    • Caztrol Troy
    Gracias,... perdi mucho tiempo en esto.. mejor IMPOSIBLE:."
Dejar un comentario
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web:

Comentario: