Recherche

AS3 Snippet : modifier le menu contextuel Envoyer
Programmation et tuning - as3
Écrit par Neamar   
Mercredi, 09 Juin 2010 14:36

Le menu contextuel, c'est ce petit menu qui s'affiche quand on fait un clic droit sur un objet ; le plus souvent pour afficher des options comme couper / coller.

Pour Flash, le clic droit est un peu bloqué : on ne peut pas tout modifier, contrairement à ce qu'on pourrait faire en Javascript.

Mais on peut tout de même ajouter des éléments, et éviter l'affichage des options par défaut (« Zoom avant », « Zoom arrière »).

Pour cela, AS3 nous met deux classes à disposition : ContextMenu et ContextMenuItem (il y en a d'autre, mais ces deux là sont primordiales).

L'idée est simple : ContextMenu décrit le menu contextuel, et ContextMenuItem permet d'ajouter des éléments. Voyons ça plus en détail.

Masquer les éléments par défaut

Il s'agit ici de faire disparaître les options « Précédent », « Suivant », « Zoom avant »… disponibles par défaut.

On initialise un objet ContextMenu, et on appelle sa méthode hideBuiltInItems().

 
var ClicDroit:search?q=ContextMenu%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenu.html&filter=0&num=100&btnI=lucky">ContextMenu = new search?q=ContextMenu%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenu.html&filter=0&num=100&btnI=lucky">ContextMenu();
ClicDroit.hideBuiltInItems();
 

Ajouter des éléments personnalisés

Plus intéressant, on peut ajouter des éléments personnalisés. Voyons par exemple comment ajouter des éléments « Avancer d'un niveau » et « Reculer d'un niveau », et les connecter à des listeners :

 
var menuItemRestart:search?q=ContextMenuItem%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuItem.html&filter=0&num=100&btnI=lucky">ContextMenuItem = new search?q=ContextMenuItem%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuItem.html&filter=0&num=100&btnI=lucky">ContextMenuItem("Recommencer le niveau");
var menuItemPrevious:search?q=ContextMenuItem%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuItem.html&filter=0&num=100&btnI=lucky">ContextMenuItem = new search?q=ContextMenuItem%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuItem.html&filter=0&num=100&btnI=lucky">ContextMenuItem("Reculer d'un niveau");
var menuItemNext:search?q=ContextMenuItem%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuItem.html&filter=0&num=100&btnI=lucky">ContextMenuItem = new search?q=ContextMenuItem%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuItem.html&filter=0&num=100&btnI=lucky">ContextMenuItem("Avancer d'un niveau");
var myMenu:search?q=ContextMenu%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenu.html&filter=0&num=100&btnI=lucky">ContextMenu = new search?q=ContextMenu%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenu.html&filter=0&num=100&btnI=lucky">ContextMenu();
 
 
//Configurer le menu clic droit
 
//Connecter l'évenement "clic sur le menu" avec des fonctions (non montrées ici)
menuItemRestart.addEventListener(search?q=ContextMenuEvent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuEvent.html&filter=0&num=100&btnI=lucky">ContextMenuEvent.MENU_ITEM_SELECT,getSameLevel);
menuItemPrevious.addEventListener(search?q=ContextMenuEvent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuEvent.html&filter=0&num=100&btnI=lucky">ContextMenuEvent.MENU_ITEM_SELECT,getPreviousLevel);
menuItemNext.addEventListener(search?q=ContextMenuEvent%20inurl:http://livedocs.adobe.com/flex/201/langref/%20inurl:ContextMenuEvent.html&filter=0&num=100&btnI=lucky">ContextMenuEvent.MENU_ITEM_SELECT,getNextLevel);
 
//Ajouter les éléments dans le menu clic droit.
myMenu.customItems.push(menuItemRestart);
myMenu.customItems.push(menuItemNext);
myMenu.customItems.push(menuItemPrevious);
contextMenu = myMenu;
 

Vous pouvez à tout moment interagir avec vos menus personnalisés, par exemple pour les rendre inactifs (propriété enabled) ou les masquer (visible)

Voilà qui devrait suffire pour une utilisation basique, RTFM pour une utilisation plus avancée ; par exemple pour masquer seulement certains éléments du menu par défaut ou ajouter des séparateurs...

 

Ajouter votre commentaire

Votre nom:
Votre site web:
Sujet:
Commentaire (vous pouvez utiliser de balises HTML ici):
  Code de vérification. Lettres minuscules seulement et sans espace.
Code de vérification: