Megnézzük, hogyan tudjuk a flash player „jobb klikk” menüjét az úgynevezett Context Menut-t actionscript 3-ban testreszabni. Mire is jó ez nekünk. Például, ha nem szeretnénk, hogy a felhasználó tudja zoomolni a flash tartalmat, akkor kivehetjük azt a menüből, ugyan így ha azt akarjuk, hogy csak maximum minőségen legyen elérhető, akkor letilthatjuk a quality funkciót. És persze lehetőségünk van a tartalom vezérlésére is stb. Ez egy kis apróságnak tűnhet, de egy jól elkészített programot is el tudnak rontani a zavaró részletek.

Ezt fogjuk megvalósítani:

A tartalom megtekintéséhez Flash Player-re van szükség.

Első körben nézzük meg, hogyan tudunk, saját menüt készíteni, ill. miként tudjuk az alapértelmezett elemek manipulálni.

var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();
contextMenu = myMenu;

Az első sorban csak létrehozzuk a saját menünket. A másodikban letiltjuk az össze alapértelmezett elemet (zoom, quality, print, stb.). Az utolsóban, pedig betöltjük az általunk létrehozott menüt. A hideBuiltInItems() elég kényelmes megoldás abban az esetben, ha minden ki szeretnénk iktatni, de mi van, ha mégis meg szeretnénk tartani 1-2 alap menüelemet. Szerencsére ezeket egyesével is lehetőségünk van paraméterezni.

myMenu.builtInItems.forwardAndBack = false;
myMenu.builtInItems.loop = false;
myMenu.builtInItems.play = true;
myMenu.builtInItems.print = true;
myMenu.builtInItems.quality = false;
myMenu.builtInItems.rewind = false;
myMenu.builtInItems.save = false;
myMenu.builtInItems.zoom = false;

Érdemes megjegyezni, hogy bizonyos elemek, mint pl.: Settings vagy az About, semmilyen módon nem távolíthatók el a listából.

Ezek után nézzük, meg hogyan tudunk saját listaelemeket hozzáadni újonnan készített menünkhöz.

var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();

var myText = new ContextMenuItem("Hello World");

myMenu.customItems.push(myText);
contextMenu = myMenu;

A ContextMenuItem-mel tudunk létrehozni egy új elemet, stringet vár paraméterül, ez fog megjelenni a menüben. A push utasítással tudjuk beletenni a menüelemet a ContextMenu-be.

Több menuitemet így tudunk hozzáadni:

var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();

var myText = new ContextMenuItem("Hello World");
var mail = new ContextMenuItem("mail@domain.com");
var copyr = new ContextMenuItem("Minden jog...");
myMenu.customItems.push(myText,mail,copyr);
contextMenu = myMenu;

Semmi érdekes nincs a kódba, csak annyit érdemes megjegyezni, hogy amilyen sorrendben felsoroljuk a pushban az itemeket, olyas sorrendben fognak megjelenni a menüben.

Most nézzük meg, hogyan tudjuk a menüelemeket testreszabni:

  • enabled – kattinthatóság (kiszürkül)
  • separatorBefore – kis elválasztójelek közé kerül az elem
  • visible – láthatóság (megjelenik a listában vagy sem)
  • caption – felüldefiniálja a konstruktorban megadott nevet

A caption kivételével, ami stringet, mindegyik logikai értéket vár.

var myText=new ContextMenuItem("Hello World");
var mail=new ContextMenuItem("mail@domain.com");
var copyr=new ContextMenuItem("Minden jog...");

myText.enabled=false;
myText.separatorBefore=true;
mail.caption="e-mail";
copyr.visible=false

Az eddigi ismereteinkkel már képesek vagyunk minden ízében konfigolni a menünket, de sajnos az általunk felvett elemek idáig statikusak, hiába kattint a felhasználó bármelyikre, semmi nem fog történni. Tegyünk ez ellen!

var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();

var myText=new ContextMenuItem("ActionScript.hu");
var mail=new ContextMenuItem("mail@domain.com");

myText.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,navigate);

function navigate(evt:ContextMenuEvent) {
	navigateToURL(new URLRequest("http://www.actionscript.hu/"),"_blank");
}

function navigate(evt:ContextMenuEvent) {
	navigateToURL(new URLRequest("http://www.actionscript.hu/"),"_blank");
}

myMenu.customItems.push(mail,myText);
contextMenu=myMenu;

A myText nevű menuitemhez hozzáadunk egy eseményfigyelőt. Abban az esetben, ha kattintunk a myText-re akkor lefuttatja navigate függvényünket, ami egy régebbi postban (Egyszerű linkek as3-ban) taglalt módon megnyit egy oldalt.

Legvégül pedig a teljes kód, ami egy kis ötlet add arra, hogy miként is lehet a menü segítségével vezérelni a mozinkat.

var myMenu:ContextMenu = new ContextMenu();
myMenu.hideBuiltInItems();

var myText=new ContextMenuItem("ActionScript.hu");
var mail=new ContextMenuItem("mail@domain.com");
var showCircle=new ContextMenuItem("Kör megjelenítése");
var hideCircle=new ContextMenuItem("Kör elrejtése");
myText.separatorBefore=true;
showCircle.enabled=false;

myText.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,navigate);
showCircle.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,showC);
hideCircle.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,hideC);

function navigate(evt:ContextMenuEvent) {
	navigateToURL(new URLRequest("http://www.actionscript.hu/"),"_blank");
}

function showC(evt:ContextMenuEvent) {
	circle.visible=true;
	hideCircle.enabled=true;
	showCircle.enabled=false;
}

function hideC(evt:ContextMenuEvent) {
	circle.visible=false;
	hideCircle.enabled=false;
	showCircle.enabled=true;
}

myMenu.customItems.push(mail,myText,showCircle,hideCircle);
contextMenu=myMenu;

Feleslegesnek érzem kivesézni a kódot, hiszen csak az itt bemutatott eszközöket használom fel. Innentől már mindenki fantáziájára bízom a továbbiakat.

source



Szólj hozzá a posthoz