Este es un Tip de como podemos personalizar el menú contextual del click derecho del mouse con ActionScrip 3.
Comencemos por crear un nuevo documento .fla, lo guardamos como menuContextual.fla, luego el primer paso sera crear un nuevo objeto en el escenario, abrimos la ventana acciones F9, y escribimos el siguiente código:
Código :
//creamos el objeto y lo agregamos al escenario var square:Sprite = new Sprite(); stage.addChild(square); square.graphics.lineStyle(1,0); square.graphics.beginFill(0x0099CC); square.graphics.drawRect(-25,-25,50,50); square.graphics.endFill(); square.x = stage.stageWidth/2; square.y = stage.stageHeight/2;
probamos la pelicula Ctrl+Enter, y nos dará como resultado un nuevo objeto, ya creado el objeto le diremos que al dar click sobre el, nos muestre un nuevo ítem en el menú contextual, para este caso le vamos a decir que nos rote el objeto 30º, abrimos la ventana acciones F9, y adjuntamos el siguiente código:
Código :
//creamos el nuevo item para el menucontextual.
var menuSquare:ContextMenu=new ContextMenu ;
var itemRotar:ContextMenuItem=new ContextMenuItem("Rotar 30º");
itemRotar.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,rotar);
// el método (hideBuiltInItems) oculta sólo los elementos de menú que aparecen en el menú contextual estándar.
menuSquare.hideBuiltInItems();
//Añadimos el nuevo elemento creado (itemRotar) al nuevo menucontextual.
menuSquare.customItems.push(itemRotar);
square.contextMenu=menuSquare;
function rotar(event:ContextMenuEvent):void
{
square.rotation=square.rotation + 30;
}probamos Ctrl+Enter, veremos que al dar click sobre el objeto nos muestra un nuevo ítem "Rotar 30º", ya sabemos personalizar el menú contextual del click derecho... Genial!! Ahora si queremos personalizar el menú contextual de tal forma que al dar click derecho sobre el escenario nos muestre un nuevo ítem, en el mismo documento menuContextual.fla, abrimos ventana de acciones y adjuntamos el siguiente código:
Código :
var menuStage:ContextMenu=new ContextMenu ;
var itemgotoPage:ContextMenuItem=new ContextMenuItem("www.cristalab.com");
itemgotoPage.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,gotoPage);
menuStage.hideBuiltInItems();
menuStage.customItems.push(itemgotoPage);
this.contextMenu=menuStage;
function gotoPage(event:ContextMenuEvent):void
{
var targetURL:URLRequest=new URLRequest("www.cristalab.com");
navigateToURL(targetURL);
}Probamos película Ctrl+Enter y tendremos como resultado que al dar click derecho sobre el objeto nos mostrara en el menu contextual un nuevo ítem "Rotar 30º", si seleccionamos el ítem nos ejecutara la acción programada, de la misma forma hacemos click derecho en el escenario y tendremos que nos muestra el nuevo ítem.
También lo podemos hacer creando una clase, el primer paso sera crear un nuevo documento .as, lo guardarmos en una carpeta como newMenu.as, vamos a crear la clase, escribimos este código:
Código :
package
{
import flash.display.Sprite;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.events.ContextMenuEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
public class newMenu extends Sprite
{
public var square:Sprite;
public var menuSquare:ContextMenu;
public var menuStage:ContextMenu;
public var ItemRotar:ContextMenuItem;
public var ItemgotoPage:ContextMenuItem;
public function newMenu()
{
square=new Sprite ;
addChild(square);
square.graphics.lineStyle(1,0);
square.graphics.beginFill(0xFFCC00);
square.graphics.drawEllipse(-50,-25,100,50);
square.graphics.endFill();
square.x=stage.stageWidth / 2;
square.y=stage.stageHeight / 2;
menuSquare=new ContextMenu ;
ItemRotar=new ContextMenuItem("Rotar 45º");
ItemRotar.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,rotar);
menuSquare.hideBuiltInItems();
menuSquare.customItems.push(ItemRotar);
square.contextMenu=menuSquare;
menuStage=new ContextMenu ;
ItemgotoPage=new ContextMenuItem("www.cristalab.com");
ItemgotoPage.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,gotoPage);
menuStage.hideBuiltInItems();
menuStage.customItems.push(ItemgotoPage);
this.contextMenu=menuStage;
}
public function rotar(event:ContextMenuEvent):void
{
square.rotation=square.rotation + 45;
}
public function gotoPage(event:ContextMenuEvent):void
{
var targetURL:URLRequest=new URLRequest("www.cristalab.com");
navigateToURL(targetURL);
}
}
}Proseguimos con crear un nuevo documento .fla, lo guardamos como newMenu.fla, lo dejaremos en la misma carpeta donde esta la clase creada anteriormente, ahora abrimos la ventana propiedades y en el campo clase de documento , escribimos newMenu, ya solo nos queda probar la pelicula Ctrl+Enter.
Fácil verdad!! de esta manera ya podemos personalizar nuestro menú contextual, espero les sea de mucha utilidad...

Interesante
Creo que me da algunas ideas...
Creo que retomaré Flash en estas vacaciones
Por adriesp el 21 de Mayo de 2008
Muchas gracias
Por gustavo castro el 21 de Mayo de 2008
me quedo grande hacerlo cuando copia la primera parte no hace nada sera que estoy haciendolo mal?
Gustavo
gustavo.castro.jimenez@gmail.com
Por adriesp el 22 de Mayo de 2008
1. Crea un nuevo documento fla de AS3
2. Pon como Clase de Documento newMenu
3. Crea un nuevo archivo de ActionScript llamado "newMenu.as" en el mismo directorio donde tienes el archivo fla
4. Copia y pega en "newMenu.as" el código de clase posteado por fredybg. (el último bloque de codigo)
5. ctrl + Enter
Por Juan el 24 de Mayo de 2008
Por margius el 24 de Mayo de 2008
Por hans febres reategui el 24 de Mayo de 2008
Por carlos el 24 de Mayo de 2008
fredybg ahora lo que si estaría buenisimo (no se si se podrá
Por heavylove583 el 25 de Junio de 2008
Por oscarlosan el 28 de Agosto de 2008
package codigo
{
...
}
y en la Mainclase del .fla, he puesto:
...
public class Main extends MovieClip {
private var menu:newMenu;
public function Main ():void {
menu = new newMenu();
...
pero me sale el siguiente error:
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at codigo::newMenu$iinit()
at Main$iinit()
Gracias.
Por fredybg el 28 de Agosto de 2008
oscarlosan-blog :
si lo que quiere es crear una carpeta donde pueda almacenar la clase ya creada newMenu.as lo que deberia hacer es un classpath, lo que tiene que hacer es crear una nueva carpeta llamada "clases", luego asi dentro de flash se remite a edit, Preferences, en e cuadro de dialogo Preferences haga clic en "ActionScript" y luego clic en configuracion de ActionScripy 3,0, en el cuador de dialogo de ActionScrip 3,O, haga clic en el signo "+", haga clic en el boton de exploracion, para navegar por el sistema y encontrar la nueva carpeta "clases", ya localizada la carpeta le da aceptar.
Hecho! ya flash sabra el camino de la clase.
la clase le quedara asi:
Código :
package miCarpeta { import flash.display.Sprite; import flash.ui.ContextMenu; import flash.ui.ContextMenuItem; import flash.events.ContextMenuEvent; import flash.net.navigateToURL; import flash.net.URLRequest; public class newMenu extends Sprite { public var square:Sprite; public var menuSquare:ContextMenu; public var menuStage:ContextMenu; public var ItemRotar:ContextMenuItem; public var ItemgotoPage:ContextMenuItem; public function newMenu() { square=new Sprite ; addChild(square); square.graphics.lineStyle(1,0); square.graphics.beginFill(0xFFCC00); square.graphics.drawEllipse(-50,-25,100,50); square.graphics.endFill(); square.x=stage.stageWidth / 2; square.y=stage.stageHeight / 2; menuSquare=new ContextMenu ; ItemRotar=new ContextMenuItem("Rotar 45º"); ItemRotar.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,rotar); menuSquare.hideBuiltInItems(); menuSquare.customItems.push(ItemRotar); square.contextMenu=menuSquare; menuStage=new ContextMenu ; ItemgotoPage=new ContextMenuItem("www.cristalab.com"); ItemgotoPage.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,gotoPage); menuStage.hideBuiltInItems(); menuStage.customItems.push(ItemgotoPage); this.contextMenu=menuStage; } public function rotar(event:ContextMenuEvent):void { square.rotation=square.rotation + 45; } public function gotoPage(event:ContextMenuEvent):void { var targetURL:URLRequest=new URLRequest("www.cristalab.com"); navigateToURL(targetURL); } } }tenga en cuenta que la carpeta "miCarpeta" aun no existe, entonces hay que guardarla dentro de la carpeta ya creada "clase" y ya dentro de "micarpeta" guarda la clase newMenu.as, ya hecho esto va al documento .fla, y importa la clase.
Código :
presiona Ctrl + Enter
Por oscarlosan el 01 de Septiembre de 2008
Pero ahora me importa bien la clase, pero cuando llega a la linea:
var new_Menu:newMenu = newMenu();
aparece el siguiente error al compilar:
1136: Número de argumentos incorrecto. Se esperaba 1.
No entiendo pq pasa esto si el constructor no tiene parametros.
Muchas gracias por tu ayuda.
Por oscarlosan el 15 de Septiembre de 2008
Por menu contextual en i el 04 de Noviembre de 2008
Por Arc el 07 de Febrero de 2009
¿Alguna idea?
PD: Sois unos cracks
Por Jesús Rivas el 04 de Abril de 2009
vete al menu:
file -> publish setting -> flash
o sino
en la ventana de propiedades
"settings..."
en versión pon:
"Flash Player 9"
y en actionscript version pon:
"ActionScript 3.0"
si te sigue dando error pos... no sé...
lanza la pc por el balcón =D
Por polo_W12 el 26 de Julio de 2010
import flash.net.URLLoader;
import flash.net.*
var menu:ContextMenu = new ContextMenu ;
menu.hideBuiltInItems();
var arreglolinks:Array = new Array("http://www.google.cl/::GOOGLE", "http://www.lun.cl/::LUN");
var totallinks:Number = arreglolinks.length;
var vinculo:Array = new Array();
init();
function init():void{
var i:Number = 0;
for(i=0;i<totallinks;i++){
var tmp:Array = arreglolinks[i].split("::");
var elemento:ContextMenuItem = new ContextMenuItem(tmp[1]);
elemento.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,linkear);
menu.customItems.push(elemento);
}
this.contextMenu=menu;
}
function linkear(e:ContextMenuEvent):void{
var a:String=e.currentTarget.caption;
var i:Number = 0;
for(i=0;i<totallinks;i++){
var tmp:Array = arreglolinks[i].split("::");
if(a==tmp[1]){
trace(tmp[0]);
if(tmp[0]){
var targetURL:URLRequest=new URLRequest(tmp[0]);
navigateToURL(targetURL, "_blank");
}
}
}
}
Saluda Atte.
Claudio Barrera Asencio.
Por polo_W12 el 26 de Julio de 2010
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.net.*
var menu:ContextMenu = new ContextMenu ;
menu.hideBuiltInItems();
var arreglolinks:Array = new Array("http://www.google.cl/::GOOGLE", "http://www.lun.cl/::LUN");
var totallinks:Number = arreglolinks.length;
var vinculo:Array = new Array();
init();
function init():void{
var i:Number = 0;
for(i=0;i<totallinks;i++){
var tmp:Array = arreglolinks[i].split("::");
var elemento:ContextMenuItem = new ContextMenuItem(tmp[1]);
elemento.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,linkear);
menu.customItems.push(elemento);
}
this.contextMenu=menu;
}
function linkear(e:ContextMenuEvent):void{
var a:String=e.currentTarget.caption;
var i:Number = 0;
for(i=0;i<totallinks;i++){
var tmp:Array = arreglolinks[i].split("::");
if(a==tmp[1]){
trace(tmp[0]);
if(tmp[0]){
var targetURL:URLRequest=new URLRequest(tmp[0]);
navigateToURL(targetURL, "_blank");
}
}
}
}
</pre>
Por Skuash el 20 de Diciembre de 2010
Por lord simmonds el 20 de Marzo de 2012