IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH 8] Fonction de menu contextuel


Sujet :

Flash

  1. #1
    Membre régulier Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 84
    Points
    84
    Par défaut [FLASH 8] Fonction de menu contextuel
    Bonjour,

    J'ai une classe qui contient un movie clip et un boolean. Je mets un menu contextuel sur le movie clip qui doit exécuter une fonction. Dans cette fonction, je n'arrive pas à accéder au boolean (fonction trace me renvoie undefined).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    class MaClasse {
     
    ....
     
    var isVisible:Boolean;
     
    function init() {
       isVisible = new Boolean(false);
       bbox = map.createEmptyMovieClip("bbox"+sceneNumber, map.getNextHighestDepth()); 
       var menu = getMenu();
       bbox.menu = menu;
    }
     
    function getMenu() {
       var menu = new ContextMenu();
       menu.hideBuiltInItems();
       var hideBBOXItem = new ContextMenuItem("rendre visible/invisible l'emprise", hideBBOX);
       menu.customItems.push(hideBBOXItem);
       return menu;
    }
     
    function hideBBOX() {
       trace(isVisible);
    }
    }
    Comment faire ?

    Merci !

    WwAvE

  2. #2
    Membre confirmé Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Points : 483
    Points
    483
    Par défaut
    Hello
    Il faut que tu changes le scope de ta fonction (le this dans la fonction...)
    Pour cela tu as la classe mx.utils.Delegate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    import mx.utils.Delegate ;
     
    class MaClasse {
     
        //....
     
       public var isVisible:Boolean ;
     
       public function init() {
           isVisible = new Boolean(false);
           bbox = map.createEmptyMovieClip("bbox"+sceneNumber, map.getNextHighestDepth());
           var menu = getMenu();
           bbox.menu = menu;
       }
     
       public function getMenu() {
          var menu = new ContextMenu();
          menu.hideBuiltInItems();
          var hideBBOXItem = new ContextMenuItem("rendre visible/invisible l'emprise", Delegate.create(this, hideBBOX));
          menu.customItems.push(hideBBOXItem);
          return menu;
       }
     
       public function hideBBOX() {
            trace(this + " >> " + isVisible) ; // this permet de visualiser le scope de la fonction
        }
    }
    scope = ciblage
    EKA+

  3. #3
    Membre régulier Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 84
    Points
    84
    Par défaut
    De nouveaux problèmes...

    Lorsque je suis dans la fonction hideBBOX(), je souhaite accéder à une autre fonction de ma classe mais rien à faire je n'y accède pas. Pourtant le changement du scope à fonctionner...

    Peux tu m'aider ?

  4. #4
    Membre confirmé Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Points : 483
    Points
    483
    Par défaut
    montre isole ton problème dans un petit exemple (sans forcément mettre tout ton code)
    EKA+

  5. #5
    Membre régulier Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 84
    Points
    84
    Par défaut
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    import mx.utils.Delegate ;
     
    class MaClasse {
     
        //....
     
       public var isVisible:Boolean ;
     
       public function init() {
           isVisible = new Boolean(false);
           bbox = map.createEmptyMovieClip("bbox"+sceneNumber, map.getNextHighestDepth());
           var menu = getMenu();
           bbox.menu = menu;
       }
     
       public function getMenu() {
          var menu = new ContextMenu();
          menu.hideBuiltInItems();
          var hideBBOXItem = new ContextMenuItem("rendre visible/invisible l'emprise", Delegate.create(this, hideBBOX));
          menu.customItems.push(hideBBOXItem);
          return menu;
       }
     
       public function hideBBOX() {
            displayImage();
        }
     
       public function displayImage() {
            trace("OK");
       }
    }
    Il en m'affiche pas "OK"...

  6. #6
    Membre confirmé Avatar de ekameleon
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    401
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 401
    Points : 483
    Points
    483
    Par défaut
    Dans ton code au passage :
    1 - pouquoi tu fais un new Boolean ? pour initialiser isVisible ? tu peux utiliser une primitive directement non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    isVisible = false ;
    2 - bbox c'est quoi ? juste un clip vide ?

    3 - Tu es dans flashMX2004 ou Flash 8 (tu compiles en flash 7 ou 8 ?)
    Méfiance il y un bug en flashplayer 7 avec les contextMenu !

    4 - Bon vu que tu m'as donné un code mais qu'il manque des bouts pour le tester directement.. j'ai adapté ta classe pour faire un test rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    import mx.utils.Delegate ;
     
    class test.MaClasse {
     
    	// ----o Constructor
     
    	public function MaClasse(target:MovieClip) {
    		targetInstance = target
    		init() ;
    	}
     
    	// ----o Public Properties
     
    	public var isVisible:Boolean ;
    	public var bbox:MovieClip ;
    	public var targetInstance:MovieClip ;
     
    	// ----o Public Methods
     
    	public function draw():Void {
    		with (bbox) {
    			clear() ;
    			beginFill(0xFF0000, 100) ;
    			lineTo(50, 0) ;
    			lineTo(50, 50) ;
    			lineTo(0, 50) ;
    			lineTo(0, 0) ;
    			endFill() ;
    		}
    	}
     
    	public function init() {
    		isVisible = false ;
    		bbox = targetInstance.createEmptyMovieClip("bbox", 15);
    		bbox.menu = getMenu() ;
    		draw() ;
     
       }
     
       public function getMenu() {
          var menu = new ContextMenu();
          menu.hideBuiltInItems();
          var hideBBOXItem = new ContextMenuItem("rendre visible/invisible l'emprise", Delegate.create(this, hideBBOX));
          menu.customItems.push(hideBBOXItem);
          return menu;
       }
     
       public function hideBBOX() {
            displayImage();
        }
     
       public function displayImage() {
            trace("OK");
       }
    }
    et dans flash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import test.MaClasse ;
    var instance = new MaClasse(this) ;
    Et là tout marche ... bouton droit > OK dans le panneau de sortie

    EKA+

Discussions similaires

  1. Ajouter deux nouvelles fonctions au menu contextuel
    Par medjahedmejdoub dans le forum Vos Contributions VBScript
    Réponses: 0
    Dernier message: 30/11/2010, 18h06
  2. Ajouter quelques fonctions au menu contextuel.
    Par Soobook dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 15/08/2008, 15h57
  3. [FLASH 8] Fonctions pour menu
    Par plugz dans le forum Flash
    Réponses: 7
    Dernier message: 07/12/2006, 15h52
  4. [FLASH 8] Menu contextuel
    Par aldo-tlse dans le forum Flash
    Réponses: 3
    Dernier message: 25/11/2005, 11h34
  5. Réponses: 15
    Dernier message: 12/08/2005, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo