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 :

Extend et MouseEvent


Sujet :

Flex

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut Extend et MouseEvent
    Bonjour,

    Voila, j'ai consulter pas mal de doc sur le sujet et j'avoue, je crois que je n'y comprend toujours rien.

    Je voudrais faire un extend de Event ou MouseEvent, me permetant de passer des paramètres personalisé lors d'un click par exemple.

    Voila ce que je fais:

    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
    package myEvent
    {
            import flash.events.Event;
     
            public class SlideEvent extends Event
            { 
            public static const CLICK:String = "click";
     
            public var result:Boolean;
     
            public function SlideEvent(type:String, param1:Boolean, bubbles:Boolean=false, cancelable:Boolean=false)
            {
                    super(type, bubbles, cancelable);
     
                    this.result = param1;
            }
     
     
            public override function clone():Event
            {
                            return new SlideEvent(type, result, bubbles, cancelable);
            }
     
            public override function toString():String
            {
               return formatToString("SlideEvent", "type", "result", "bubbles", "cancelable", "eventPhase");
            }
            }
    }
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init(event)" viewSourceURL="srcview/index.html">
            <mx:Script>
                    <![CDATA[
                    import myEvent.SlideEvent;
                    import mx.controls.alert;
     
     
                    private function init(e:Event):void
                    {
                            bt1.toggle = true;
     
                            addEventListener(SlideEvent.CLICK, eSlide);
                            dispatchEvent(new SlideEvent(SlideEvent.CLICK, true));
                    }
     
     
                    private function eSlide(e:SlideEvent):void
                    {
                            alert.show(String(e.result));
                    }
     
     
                    ]]>
            </mx:Script>
            <mx:Button label="Button 1" id="bt1"/>
    </mx:Application>

    Des que je click sur bt1, il me dit :
    "TypeError: Error #1034: Echec de la contrainte de type : conversion de flash.events::MouseEvent@45180e1 en myEvent.SlideEvent impossible."
    Bon a mon avis c'est une erreur normal, mais comme je ne vois pas comment faire ...

    Merci a vous

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Il doit manquer un truc là, parce que je vois pas où tu associes ton bouton à un événement click...
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    oui, c'est vrai je l'ai oublié sur la capture, je donne un autre code plus correct, qui de toute donne la même erreur :

    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
    package myEvent
    {
        import flash.events.Event;
     
        public class SlideEvent extends Event
        { 
            public static const CLICK:String = "click";
     
            public var result:Boolean;
     
            public function SlideEvent(type:String, param1:Boolean=false, bubbles:Boolean=false, cancelable:Boolean=false)
            {
                    super(type, bubbles, cancelable);
     
                    this.result = param1;
            }
     
     
            public override function clone():Event
            {
                            return new SlideEvent(type, result, bubbles, cancelable);
            }
     
            public override function toString():String
            {
               return formatToString("SlideEvent", "type", "result", "bubbles", "cancelable", "eventPhase");
            }
    	}
    }
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init(event)" layout="absolute">
            <mx:Script>
                    <![CDATA[
    				import mx.controls.Alert
                    import myEvent.SlideEvent;
     
                    private var evtPerso:SlideEvent = new SlideEvent(SlideEvent.CLICK, false)
     
     
     
                    private function init(e:Event):void
                    {
            				bt1.addEventListener(SlideEvent.CLICK, eSlide);
                    }
     
     
                    private function eSlide(e:SlideEvent):void
                    {
    					Alert.show(String(e.result));
                    }
     
     
                    private function delcenche():void
                    {
            			bt1.dispatchEvent(evtPerso);                	
                    }
     
     
                    ]]>
            </mx:Script>
            <mx:Button label="Button 1" id="bt1"/>
            <mx:Button label="Declenche" x="369" y="298" id="dec" click="delcenche()"/>
    </mx:Application>
    Donne :

    > TypeError: Error #1034: Echec de la contrainte de type*: conversion de myEvent::SlideEvent@4567699 en flash.events.MouseEvent impossible.

  4. #4
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Bonjour,

    je pense qu'il faudrait que la classe hérite de MouseEvent et non de Event.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    je pense qu'il faudrait que la classe hérite de MouseEvent et non de Event.
    Je me suis déja fait cette remarque, en fait j'ai déja fait pas mal de test et de recherche, Event ou MouseEvent, il y a toujours des pb qui se posent.

    Si tu me met la solution avec MouseEvent qui marche, moi ca me va ^^

    mais après tous le temps que j'y ai passé la moi, je seche toujours ...

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Il me semble avoir déjà eu ce genre de problème qui était du au fait que les deux classes d'événement utilisaient la même chaîne de caractère pour identifier le type de l'événement.

    Depuis j'utilise des chaînes uniques.

    Tu peux essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static const CLICK:String = "slideclick";
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  7. #7
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Bonjour,
    le code d'erreur t'indique clairement
    > TypeError: Error #1034: Echec de la contrainte de type*: conversion de myEvent::SlideEvent@4567699 en flash.events.MouseEvent impossible.
    le SlideEvent est un évènement qui est lancer lorsqu'on utilise le HSlide ou le VSlide??

    tu ne peux pas caster cet évènement en MouseEvent ...

    Je te conseille de lancer ton code en mode debug et tu verras bien le type de ton évènement

    Ciao
    THE CHANGE

    Toujours en quête de connaissance

    WINDOWS :Oracle 11G, SQL DEVELOPER 2.2, Eclipse Ganymede 3.4 plugins VE 1.4, Flex 4

    MAC OsX 10.6.5 : Oracle 10G R2 SQL DEVELOPER 1.5.4, Eclipse Helios 3.6, plugins VE 1.4, Flex 4

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    @jylaxx:

    Je vois exactement de ce que tu veux parler, mais le fait de changer "click" par "slideclick" ne doit plus du tout prendre en compte ton click sourie, via super(type, bubbles, cancelable);

    Donc ca ne peux pas marcher.

    @cashmoney:
    le SlideEvent est un évènement qui est lancer lorsqu'on utilise le HSlide ou le VSlide??
    Je ne suis pas sûr que tu puisse vraiment m'aider, si tu ne comprend pas déja ca.
    SlideEvent et l'evenement que je crée en faisant un extend de la class Event.


    Pour le reste comme je l'ai dit avec MouseEvent j'ai aussi de toute manière des pb. Le mieux serait de me checké le code qui fonctionnerai, que je vois ce qui va pas chez moi, j'ai fait énormément de test, je ne peux pas tous les mettre pour montrer a chaque fois les pb.

    Le fait est que ca ne fonctionne jamais, avec MouseEvent j'avais meme d'autre pb comme l'override de clone(), qui posait pb, pas compris non plus pourquoi


    c'est comme même bizzard, tout le monde fait du switch case sur event.target ou quoi ?

    Si ta 20 test ca fait 40 lignes alors qu'avec un parametre, tu réduit a une ligne.

    Je comprend pas d'etre le seul me confronter avec le fait de vourloir passer un parametre avec un MouseEvent.

    Rien que ca c'est déja louche.

  9. #9
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Selon moi, la remarque de Jylaxx est pertinante et devrait fonctionner.

    tu remplaces dans ton event personnalisé ta constante par une string du genre "slideclick" et ca doit passer

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    le fait de changer "click" par "slideclick" ne doit plus du tout prendre en compte ton click sourie, via super(type, bubbles, cancelable);
    Je crois qu'il y a une incompréhension du fonctionnement des événements.

    Rien ne relit ton événement SlideEvent à un click souris...
    Appeler super() ne fait qu'appeler le constructeur de la classe Event, c'est tout.
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    @jylax, @Jim_Nastiq

    Ouaip, je crois que l'on touche le vrai pb, néanmoins, le vrai pb et qu'il y a quelque chose que je commprend mal dans le fonctionnement des evenements comme le dit trés bien jylax.

    On va faire simple, j'ai crée cette nouvelle classe héritant de MouseEvent, qui elle me parait bonne:
    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
     
    package myEvent
    {
        import flash.display.InteractiveObject;
        import flash.events.Event;
        import flash.events.MouseEvent;
     
        public class MouseEventEx extends MouseEvent
        { 
            public static const CLICKED:String = "clicked";
     
            public var chaine1:String;
            public var chaine2:String;
     
    		public function MouseEventEx(type:String, param1:String, param2:String, bubbles:Boolean = true, cancelable:Boolean = false, localX:Number=0, localY:Number=0, relatedObject:InteractiveObject = null, ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false, buttonDown:Boolean = false, delta:int = 0)
     
            {
            	super(type, bubbles, cancelable, localX, localY, relatedObject, ctrlKey, altKey, shiftKey, buttonDown, delta);
     
    			this.chaine1 = param1;
    			this.chaine2 = param2;
            }
     
     
            public override function clone():Event
            {
    			return new MouseEventEx(type, chaine1, chaine2, bubbles, cancelable, localX, localY, relatedObject, ctrlKey, altKey, shiftKey, buttonDown, delta);
            }
     
     
            public override function toString():String
            {
               return formatToString("MouseEventEx", "type", "chaine1", "chaine2", "bubbles", "cancelable", "localX", "localY", "relatedObject", "ctrlKey", "altKey", "shiftKey", "buttonDown", "delta", "eventPhase");
            }
    	}
    }
    On va donc repartir de 0, cad, comment l'utiliser pour que je puisse faire l'equivalent d'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    bt.addEventListener(MouseEvent.CLICK, mafonction(param1, param2));
     
     
    private mafonction(e:Event, param1:String, param2:String):void
    {
      ...
    }
    avec celle-ci ???

  12. #12
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Citation Envoyé par islogged Voir le message
    Je ne suis pas sûr que tu puisse vraiment m'aider, si tu ne comprend pas déja ca.
    SlideEvent et l'evenement que je crée en faisant un extend de la class Event.
    la classe Event ne couvre pas tous les évènement l'ami, même s'il semble générique. Tu devrais lire la doc.
    THE CHANGE

    Toujours en quête de connaissance

    WINDOWS :Oracle 11G, SQL DEVELOPER 2.2, Eclipse Ganymede 3.4 plugins VE 1.4, Flex 4

    MAC OsX 10.6.5 : Oracle 10G R2 SQL DEVELOPER 1.5.4, Eclipse Helios 3.6, plugins VE 1.4, Flex 4

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    la classe Event ne couvre pas tous les évènement l'ami, même s'il semble générique. Tu devrais lire la doc.
    Merci pr ta volonté de m'aider, mais je ne sais pas si ca vient de moi ou de toi, mais a chaque fois j'ai l'impression que tu me répond Hors sujet. (contrairement aux autres)

    Si tu veux vraiment m'aider, mets moi l'exemple du code qui fonctionnerai a l'aide de ma sous-class MouseEventEx.

    Au moins je pense que je comprendrai, n'importe quel code en dit plus qu'un long discourt.

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Pour remplacer l'événement CLICK généré par le bouton par ton propre événement il faudrait dériver une classe MyButton et surcharger la méthode clickHandler.

    Sinon tu peux re-dispatcher un nouvel événement à partir de cet événement CLICK.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private function click( event : MouseEvent ) : void
    {
      btn.dispatchEvent( new MouseEventEx(.......) ) ;
    }
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    hum ...

    Content mais perplex, tes réponses m'aide beaucoup, mais je dois y réfléchir a chaque fois par 2 fois ...

    Je suppose que tu m'a proposé de faire ca :

    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
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute">
            <mx:Script>
                    <![CDATA[
                    import mx.controls.Alert;
                    import myEvent.MouseEventEx;
     
                    private function init():void
                    {
                    	bt1.addEventListener(MouseEvent.CLICK, click);
                    	bt1.addEventListener(MouseEventEx.CLICKED, eCouteur); 
                    }
     
    				private function click(event:MouseEvent) : void
    				{
    					bt1.dispatchEvent(new MouseEventEx(MouseEventEx.CLICKED, 'salut', 'ca va ?')) ;
    				}			
     
     
                    private function eCouteur(e:MouseEventEx):void
                    {
    					Alert.show(e.chaine1 + ' ' + e.chaine2);
                    }
     
     
     
                    ]]>
            </mx:Script>
            <mx:Button label="Button 1" id="bt1"/>
    </mx:Application>
    Si c'est bien le cas, la bonne nouvelle est que cela fonctionne parfaitement

    ---

    Mais ca commence a remettre toute ma compréhension de la chose.

    Dans Flex, je suis parti du postulat, que je n'utiliserai plus :

    click="fonction1('param1', 'param2') dans le MXML, pour bien séparer la forme du fond, (il suffit de copier/coller la forme (le MXML), dans un nouveau projet pour s'appercevoir trés rapidement que les click="..."/> vont vite faire désordre, et qu'il va falloir les enlever ou les redéfinir, UN par UN.

    Alors je me suis mis de remplacer ca par le code AS3 soit apparament par :
    "addEventListener(MouseEvent.CLICK,"

    seulement la je ne peux plus faire de "addEventListener(MouseEvent.CLICK, fonction1(param1, param2)".


    ou alors il faut que je face dans une fonction supplémentaire fonctionENPLUS(e:MouseEvent) des
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    switch (e.target)
    case  'bt1":
    fonction1('salut', 'ca va ?')
    break
     
    case "bt2":
    fonction1('bof', 'on a vu mieux')
    break
    et cela autant de fois que le contenu des parametres diffères, en fonction du bt clické (par ex)

    Donc - 1 - c'est un peu (même bcp) lourd non ?, comme solution

    La 2iem solution et c'elle que tu viens de m'exposé, mais la encore un fois je dois faire un extend d'une class, + créer une fonction intermediaire ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private function click(event:MouseEvent) : void
    {
    bt1.dispatchEvent(new MouseEventEx(MouseEventEx.CLICKED, 'salut', 'ca va ?')) ;
    bt2.dispatchEvent(new MouseEventEx(MouseEventEx.CLICKED, 'Bof', 'on a vu mieux ?')) ;
    }

    Donc - 2 - c'est un peu (même bcp) lourd non ?, comme solution


    Dernière solution tout aussi absurde, faire autant de variable global que de parametre a envoyer.

    (J'ai même vu dans mes recherches, dans ce et d'autres forum, que certains était content d'avoir trouvé la solution en passant les paramettre dans les datas du bouton .... !!!)

    Alors soit je loupe, vraiment quelque chose, soit je n'ai rien compris, ou soit c'est pas trés évolué comme language ?

    Ce que je veux faire c un truc de base, soit envoyer des parametres différents quand on click sur des boutons différents a une fonction lambda,

    Et la vu que l'on peut pas faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bt1.addEventListener(MouseEvent.CLICK, lambda(param1, param2);
    J'ai l'impression qu'il faut sortir un char d'assault pour allez faire mes courses.

    1 - Comment vous faites vous, concretement ?
    2 - Ma constation est elle censé ?


    Merci,
    Je cherche avant tout en fait a comprendre ...

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    Bon j'ai pas tout compris à ce que tu souhaites faire...
    mais les notions de base sont :

    1- Tu peux très bien écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private function test(event:MouseEvent, s1:String, s2:String):void
    {
      Alert.show(event.type + " - " + s1 + " - " + s2 ) ;
    }
     
    <mx:Button click="test(event,'click','sur un bouton');" />
    Flex l'interprète ainsi : il ajoute un listener sur l'événement CLICK et exécute la fonction test dans ce listener.

    2- Si tu veux écrire la même chose en AS3, c'est :

    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
    private function init() : void
    {
      btn.addEventListener( MouseEvent.CLICK, onClick );
    }
     
    // cette signature est obligatoire pour être utilisée dans addEventListener
    private function onClick(event:MouseEvent):void
    {
      test( event, 'click', 'sur un bouton' ) ;
    }
     
    private function test(event:MouseEvent, s1:String, s2:String):void
    {
      Alert.show(event.type + " - " + s1 + " - " + s2 ) ;
    }
     
    <mx:Button id="btn" />
    Il faut bien comprendre les différences entre mxml et AS3. Le mxml est souvent plus rapide à écrire mais il cache beaucoup de chose !
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  17. #17
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Si j'ai bien compris tu souhaites ajouter de l'intelligence à tes boutons finalement ... tu peux créer ta propre classe myButton qui hérite de Button et ainsi tu as ce que tu souhaites en dispatchant un event personnalisé avec autant de paramètre que tu le souhaite.
    Il faut bien comprendre qu'un bouton n'a aucune intelligence autre que de transmettre l'info des actions utilisateurs sur lui et de ses changement d'états. Ajouter des infos à ces boutons implique que tu le complexifie en lui rajoutant une notion de conteneur de données, ce qui n'est pas sa fonction première


    J'ai peut etre mal(rien ?) compris à ton questionnement

    Pensez vraiment à effectuer une recherche avant de poster, ici et sur un moteur de recherche! c'est la moindre des choses
    Pensez au tag

    Mon Blog sur la techno Flex
    Ma page sur Developpez.com

    Jim_Nastiq

  18. #18
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    J'ai peut etre mal(rien ?) compris à ton questionnement
    Non, non, toi et particulièrement jylaxx parlons bien de la chose que j'expose.

    <mx:Button click="test(event,'click','sur un bouton');" />
    Cette façon de faire m'aller trés bien, hormis comme je l'ai préciser dans mon précédent post (je me cite)

    Dans Flex, je suis parti du postulat, que je n'utiliserai plus :

    click="fonction1('param1', 'param2') dans le MXML, pour bien séparer la forme du fond, (il suffit de copier/coller la forme (le MXML), dans un nouveau projet pour s'appercevoir trés rapidement que les click="..."/> vont vite faire désordre, et qu'il va falloir les enlever ou les redéfinir, UN par UN.

    1 - Ai-je finallement raison ?

    Alors je me suis mis de remplacer ca par le code AS3 soit apparament par :
    "addEventListener(MouseEvent.CLICK,"
    et effectivement, si je veux tout faire en as3 (mis a part la forme en mxml)
    (pour reprendre le code de jylaxx) cela donne :

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute">
    <mx:Script>
    <![CDATA[
    import mx.controls.Alert;
    import myEvent.MouseEventEx;



    private function init():void
    {
    bt1.addEventListener(MouseEvent.CLICK, onClick);
    bt2.addEventListener(MouseEvent.CLICK, onClick);

    }

    // cette signature est obligatoire pour être utilisée dans addEventListener
    private function onClick(event:MouseEvent):void
    {
    switch(event.target)
    {
    case bt1:
    test(event, 'click', 'sur un bouton' ) ;
    break;

    case bt2:
    test(event, 'Press', 'sur un autre bouton' ) ;
    break;

    case btx:
    .....

    }

    }

    private function test(event:MouseEvent, s1:String, s2:String):void
    {
    Alert.show(event.type + " - " + s1 + " - " + s2 ) ;
    }



    ]]>
    </mx:Script>
    <mx:Button label="Button 1" id="bt1"/>
    <mx:Button label="Button 2" id="bt2" y="30"/>
    </mx:Application>
    Ce qui donne un code bigrement a rallonge du au fait que je doit a chaque fois retester le bouton[Source] (et la encore j'en ai mis que 2 ...), pour envoyer les bon parametre a chaque fois ...

    Alors qu'un simple :

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute">
    <mx:Script>
    <![CDATA[
    import mx.controls.Alert;
    import myEvent.MouseEventEx;



    private function init():void
    {
    bt1.addEventListener(MouseEvent.CLICK, test('click', 'sur un bouton'));
    bt2.addEventListener(MouseEvent.CLICK, test('Press', 'sur un autre bouton'));

    }


    private function test(s1:String, s2:String):void
    {
    Alert.show(" - " + s1 + " - " + s2 ) ;
    }



    ]]>
    </mx:Script>
    <mx:Button label="Button 1" id="bt1"/>
    <mx:Button label="Button 2" id="bt2" y="30"/>
    </mx:Application>
    a l'image d'un :
    <mx:Button id="bt1" click="test('click','sur un bouton');" />
    <mx:Button id="bt2" click="test('Press', 'sur un autre bouton');" />
    Je pensais qu'il y aurai plus simple, ou du moins moyen de modifier

    bt1.addEventListener(MouseEvent.CLICK, onClick)
    par :
    bt1.addEventListener(MouseEvent.CLICK, onClick('click', 'sur un bouton')

    cela a travers un extend (ce que j'essayé de faire) ou autre.


    donc :
    Si j'ai bien compris tu souhaites ajouter de l'intelligence à tes boutons finalement ... tu peux créer ta propre classe myButton qui hérite de Button et ainsi tu as ce que tu souhaites en dispatchant un event personnalisé avec autant de paramètre que tu le souhaite.
    C'est une facon de voir, et c'est surement aussi possible de le faire comme tu l'explique, mais moi, j'aurais toujours trouvé plus pertinent de rajouter de l'intelligence a l'evenement MouseEvent, de sorte a pouvoir rajouter mes parametre ainsi :

    bt1.addEventListener(MouseEvent.CLICK, onClick('click', 'sur un bouton')

    2 - Ce que je dis est censé ou non ?

  19. #19
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    793
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2009
    Messages : 793
    Points : 894
    Points
    894
    Par défaut
    J'ai un peu de mal à suivre. Chaque langage a ses contraintes il faut faire avec et je pense que AS3/mxml offre beaucoup de possibilités. Je supporte assez peu les contraintes en général et j'ai finalement rarement pesté contre Flex à ce niveau là !

    En ce qui concerne la facilité d'écriture je ne trouve pas vraiment convaincant.

    Entre :
    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
    private function init():void
    {
      bt1.addEventListener(MouseEvent.CLICK, onClickBtn1);
      bt2.addEventListener(MouseEvent.CLICK, onClickBtn2);
    }
     
    private function onClickBtn1(event:MouseEvent):void
    {
      test(event, 'click', 'sur un bouton' ) ;	
    }
     
    private function onClickBtn2(event:MouseEvent):void
    {
      test(event, 'press', 'sur un autre bouton' ) ;	
    }
     
    private function test(event:MouseEvent, s1:String, s2:String):void
    {
      Alert.show(event.type + " - " + s1 + " - " + s2 ) ;
    }
     
    <mx:Button id="bt1" />
    <mx:Button id="bt2" />
    et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private function test(event:MouseEvent, s1:String, s2:String):void
    {
      Alert.show(event.type + " - " + s1 + " - " + s2 ) ;
    }
     
    <mx:Button id="bt1" click="test('click','sur un bouton');" />
    <mx:Button id="bt2" click="test('Press', 'sur un autre bouton');" />
    pour moi la différence n'est pas significative.

    J'ajoute que souvent le programme est plus performant lorsqu'il est écrit en AS3 plutôt qu'en mxml.

    Enfin comme Jim et moi l'avons déjà dit la véritable solution au problème que tu poses se trouve dans l'écriture d'une classe dérivée. C'est l'essence même de la programmation objet !!
    jyl@xx
    "Simplicity does not precede complexity, but follows it." Alan Perlis

  20. #20
    Nouveau membre du Club
    Inscrit en
    Mai 2008
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 191
    Points : 35
    Points
    35
    Par défaut
    pour moi la différence n'est pas significative.
    oui, normal parceque tu as oublié eventuelement 50 "case:;break" pour tester chaque éventuel (event.target), ou au moins autant de fonction si l'on prend ton dernier exemple, alors qu'une seule suffirait !

    Enfin comme Jim et moi l'avons déjà dit la véritable solution au problème que tu poses se trouve dans l'écriture d'une classe dérivée.
    Jim me propose une class dérivé myButton, moi ce que j'essayé de faire c'est une class dérivé de MouseEvent. De sorte que comme j'en aurais encore souvent besoin, et pas forcément QUE, sur des boutons.

    Ma question au final, (parceque implicitement j'ai cru que vous me disiez que ce n'est pas possible) la vrai quesiton est :

    1 - Peut dérivée MouseEvent de sorte a ce que :

    bt1.addEventListener(MouseEvent.CLICK, onClick)
    devienne :
    bt1.addEventListener(MouseEvent.CLICK, onClick('click', 'sur un bouton')

    au niveau uilisation ?


    C'était ma question de ma 4 ou 5iem réponse, ou j'avais créé un extend de MouseEvent.

    Bref voila, quoi. ?

Discussions similaires

  1. [Java2D]MouseEvent sur un paint Graphics g
    Par tahiti bob dans le forum 2D
    Réponses: 9
    Dernier message: 09/10/2004, 22h15
  2. Delete et failed to extend segment
    Par elitost dans le forum Administration
    Réponses: 11
    Dernier message: 15/09/2004, 10h05
  3. Réponses: 7
    Dernier message: 03/08/2004, 16h33
  4. [debutant] [extends]
    Par Shooter dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2004, 08h53
  5. Problème lors du EXTEND d'un tableau
    Par banana31 dans le forum Oracle
    Réponses: 14
    Dernier message: 10/02/2004, 10h58

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