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

Flex Discussion :

Flex 4 et menu contextuel


Sujet :

Flex

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 33
    Par défaut Flex 4 et menu contextuel
    Bonjour,

    Je migre actuellement une de mes application de flex 3 à flex 4.
    Cependant, il reste une chose que je n'arrive pas a faire marcher.

    J'ai un advancedDatagrid, sur lequel suivant les cases sélectionnées, j'ai le menu contextuel 1 ou 2 qui s'affiche.
    Cependant je n'arrive pas a afficher n'importe lequel de mes menu contextuel une fois l'advancedDatagrid sélectionner. Le clic droit contient juste les éléments par défaut.

    Est ce que quelqu'un saurait comment faire ca ? car j'ai parcouru beaucoup de tutoriaux sur internet et je n'ai pas trouvé de solutions.

    Merci d'avance
    Florian

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Bonjour,

    Pourrais tu fournir un exemple de ce que tu as fait ?
    Où as tu défini ton menu contextuelle ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 33
    Par défaut
    Bonjour,
    merci de ton intérêt.
    Voici un bout de mon code pour expliquer mon problème.

    Voici comment dans mon fichier AS je déclare et assigne mon menu contextuel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private var mcInitial:ContextMenu = new ContextMenu();
    mcInitial.hideBuiltInItems();
    	var itemOption:ContextMenuItem = new ContextMenuItem("Options");
    	itemOption.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, panneau);
    	var itemLegende:ContextMenuItem = new ContextMenuItem("Légende");
    	itemLegende.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, afficheLegende);
    	mcInitial.customItems = [itemOption,itemLegende];
    principal.contextMenu = mcInitial;
    et voici dans mon fichier mxml a quoi correspond prinicpal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <s:BorderContainer styleName="BorderContainerGreen" id="principal" width="100%" height="100%">
    <mx1:AdvancedDataGrid id="tableEDT"
    Avant cela marchait parfaitement, j'avais un second menu contextuel affecté de la même façon sur l'advancedDatagrid. Mais en passant a flex4, je n'arrive pas a affecté mon menu contextuel a l'élément que je désire :s

    Merci d'avance pour votre aide
    Florian

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 33
    Par défaut
    J'ai trouvé d'ou venait le problème, mais je n'ai pas réussi a le résoudre.

    En effet cela provint du fait que ma titleWindows soit ouverte via le popup manager.

    Cela bloque mes menu contextuel. Cependant j'ai besoin de l'ouvrir via le popup manager afin de pouvoir déplacer la fenetre !!
    Si vous avez des idées je suis preneur

    Merci d'avance
    Florian

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 895
    Par défaut
    Je ne suis pas sûre d'avoir bien compris. Mais tu devrais peut être définir ton menu contextuel sur ton titleWindow non ? Si celui ci contient l'élément sur lequel tu dois utiliser un menu contextuel.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 33
    Par défaut
    Merci de ton intérêt.
    Mais j'ai ciblé encore un peu plus le problème.

    Mon application lance dans via le popup manager un titlewindow redimensionnable (classe que j'ai emprunter et modifier). Seulement l'utilisation de celle ci bloque les clics droits sur les élements.

    voici ma classe resizableTitleWindows, si les pros que vous êtes voyez ce qui pourrais bloquer le clic droit, je suis preneur.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    package scripts
    {
     
        import flash.display.DisplayObject;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.geom.Point;
     
        import mx.core.UIComponent;
        import mx.events.SandboxMouseEvent;
     
        import spark.components.TitleWindow;
     
        /**
         *  ResizableTitleWindow is a TitleWindow with
         *  a resize handle.
         */
        public class ResizableTitleWindow extends TitleWindow
        {
     
            //--------------------------------------------------------------------------
            //
            //  Constructor
            //
            //--------------------------------------------------------------------------
     
            /**
             *  Constructor.
             */
            public function ResizableTitleWindow()
            {
                super();
            }
     
            //--------------------------------------------------------------------------
            //
            //  Variables
            //
            //--------------------------------------------------------------------------
     
            private var clickOffset:Point;
     
            //--------------------------------------------------------------------------
            //
            //  Properties 
            //
            //--------------------------------------------------------------------------
     
            //----------------------------------
            //  Resize Handle
            //---------------------------------- 
     
            [SkinPart(required="false")]
     
            /**
             *  The skin part that defines the area where
             *  the user may drag to resize the window.
             */
            public var resizeHandle:UIComponent;
     
            //--------------------------------------------------------------------------
            //
            //  Overridden methods: UIComponent, SkinnableComponent
            //
            //--------------------------------------------------------------------------
     
            /**
             *  @private
             */
           override protected function partAdded(partName:String, instance:Object) : void
            {
                super.partAdded(partName, instance);
     
                if (instance == resizeHandle)
                {
                    resizeHandle.addEventListener(MouseEvent.MOUSE_DOWN, resizeHandle_mouseDownHandler);
                }
            }
     
            /**
             *  @private
             */
            override protected function partRemoved(partName:String, instance:Object):void
            {
                if (instance == resizeHandle)
                {
                    resizeHandle.removeEventListener(MouseEvent.MOUSE_DOWN, resizeHandle_mouseDownHandler);
                }
     
                super.partRemoved(partName, instance);
            }
     
            //--------------------------------------------------------------------------
            // 
            // Event Handlers
            //
            //--------------------------------------------------------------------------
     
            private var prevWidth:Number;
            private var prevHeight:Number;
     
            protected function resizeHandle_mouseDownHandler(event:MouseEvent):void
            {
                if (enabled && isPopUp && !clickOffset)
                {        
                    clickOffset = new Point(event.stageX, event.stageY);
                    prevWidth = width;
                    prevHeight = height;
     
                    var sbRoot:DisplayObject = systemManager.getSandboxRoot();
     
                    sbRoot.addEventListener(
                        MouseEvent.MOUSE_MOVE, resizeHandle_mouseMoveHandler, true);
                    sbRoot.addEventListener(
                        MouseEvent.MOUSE_UP, resizeHandle_mouseUpHandler, true);
                    sbRoot.addEventListener(
                        SandboxMouseEvent.MOUSE_UP_SOMEWHERE, resizeHandle_mouseUpHandler)
                }
            }
     
            /**
             *  @private
             */
            protected function resizeHandle_mouseMoveHandler(event:MouseEvent):void
            {
                // during a resize, only the TitleWindow should get mouse move events
                // we don't check the target since this is on the systemManager and the target
                // changes a lot -- but this listener only exists during a resize.
                event.stopImmediatePropagation();
     
                if (!clickOffset)
                {
                    return;
                }
     
                width = prevWidth + (event.stageX - clickOffset.x);
                height = prevHeight + (event.stageY - clickOffset.y);
                event.updateAfterEvent();
            }
     
            /**
             *  @private
             */
            protected function resizeHandle_mouseUpHandler(event:Event):void
            {
                clickOffset = null;
                prevWidth = NaN;
                prevHeight = NaN;
     
                var sbRoot:DisplayObject = systemManager.getSandboxRoot();
     
                sbRoot.removeEventListener(
                    MouseEvent.MOUSE_MOVE, resizeHandle_mouseMoveHandler, true);
                sbRoot.removeEventListener(
                    MouseEvent.MOUSE_UP, resizeHandle_mouseUpHandler, true);
                sbRoot.removeEventListener(
                    SandboxMouseEvent.MOUSE_UP_SOMEWHERE, resizeHandle_mouseUpHandler);
            }
        }
    }
    Merci d'avance
    Florian

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 33
    Par défaut
    J'ai trouvé la solution.

    C'est les composants sparks qui n'acceptent pas les clics droit dans leurs enfants.
    Pour ceux qui en aurait besoin, voici comment j'ai contourné cela, avec un mouseEnable="true" dans le skin et dans la déclaration du composant.

    Voici un article expliquant ce bug flex :
    http://forums.adobe.com/message/2783877

    Merci a ellene d'avoir essayé de m'aider
    florian

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  2. [Plugin] Ajouter une option au menu contextuel ?
    Par relivio dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 22/03/2004, 16h18
  3. [VB6] menu contextuel dynamique
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/07/2003, 11h53
  4. [VB6] menu contextuel sur clique droit souris
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/07/2003, 11h07

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