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

EDI/Outils Discussion :

Manipuler un SWF avec Flex


Sujet :

EDI/Outils

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut Manipuler un SWF avec Flex
    Bonjour a tous !

    Je suis un débutant en Flex et j'ai un problème pour la manipulation de variables/fonctions dans un flash que j'importe.
    Je m'explique : j'ai un swf qui contient juste un champ de texte dynamique qui s'appelle "textOutput" et une fonction "afficherMessage(mess)" qui affiche le message mit en paramètre dans le textOutput.

    Maintenant, j'importe le SWF dans flex avec le SWFLoader (dont l'id="com") et je veux afficher, a partir de flex, un message dans le flash. J'ai éssayé beaucoup, j'ai jamais réussi. J'ai éssayé de faire MovieClip(com.content).afficherMessage("BLAAAAA") pour afficher "BLAAAAA" dans le textOutput, mais ca n'a pas marché. J'ai recherché des solutions, sur internet ou dans la documentation de Flex, mais sans succes.

    Est-ce que quelqu'un pourrait m'expliquer comment la manipulation d'un SWF dans flex s'effectue ?

    D'avance merci !

    Cordialement, MetalFox

  2. #2
    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
    Par défaut
    Salut,

    il va nous falloir du code...
    Quand/comment tentes tu d'accéder aux méthodes de ton swf chargé?Ecoutes tu un event avant de tenter d'y accéder?
    ta méthode sur ton swf chargé est elle bien public?
    As tu des messages d'erreur lors de tes tentatives , si oui, lesquels?

    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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 3
    Par défaut
    En fait, le problème est que je cherche le code, je ne sais pas comment le coder ^^... Mais si on reprend mon dernier essai, ça donne ça :

    Dans le swf :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function afficherTexte(mess:String){
    	_root.textOutput.text=mess;
    }
    textOutput est le nom du champ de texte dans lequel ma phrase doit être affichée.

    Dans le flex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	<mx:Script>
       <![CDATA[
    		private function onComplete():void {
                MovieClip(loader.content).afficherTexte("Hello world!");
             }
       ]]>
    </mx:Script>
    <mx:SWFLoader id="loader" source="@Embed(source='comm.swf')" complete="onComplete()"/>	
    </mx:Application>
    (Honteusement pompé sur mes recherches sur le net... On apprend comme on peut ! ^^)

    Et quand je le lance, mon swf d'affiche, mais le champ de texte apparait vide, je n'arrive pas a modifier ce qu'il y a dedans... Pourtant, je n'ai aucune erreur. C'est peut-être pas du tout comme ça qu'il faut s'y prendre, je ne sais pas (c'est pourquoi je n'avais pas posté mon code... Aussi bien je suis totalement a coté de la plaque !), j'avance à tâtons...

    Cordialement, MetalFox

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 20
    Par défaut
    J'avais cherché à effectuer plus ou moins la même choses il y a quelques jours : tirer dynamiquement un swf et pouvoir appeler son contenu (par exemple une des méthodes déclarées dans le swf).

    En farfouillant un peu, je suis tombé sur un example du livedocs : http://www.adobe.com/livedocs/flex/3...ionDomain.html
    Tout à la fin, il y a un exemple très intéressant.

    Copier / coller de l'exemple en question :

    Déjà la classe ClassLoader qui va te permettre de charger un swf :

    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
    import flash.display.Loader;
    import flash.errors.IllegalOperationError;
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.IOErrorEvent;
    import flash.events.SecurityErrorEvent;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;
     
    class ClassLoader extends EventDispatcher {
        public static var CLASS_LOADED:String = "classLoaded";
        public static var LOAD_ERROR:String = "loadError";
        private var loader:Loader;
        private var swfLib:String;
        private var request:URLRequest;
        private var loadedClass:Class;
     
        public function ClassLoader() {
     
            loader = new Loader();
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
            loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
            loader.contentLoaderInfo.addEventListener(SecurityErrorEvent.SECURITY_ERROR,securityErrorHandler);
        }
     
        public function load(lib:String):void {
            swfLib = lib;
            request = new URLRequest(swfLib);
            var context:LoaderContext = new LoaderContext();
            context.applicationDomain=ApplicationDomain.currentDomain;
            loader.load(request,context);
        }
     
        public function getClass(className:String):Class {
            try {
                return loader.contentLoaderInfo.applicationDomain.getDefinition(className)  as  Class;
            } catch (e:Error) {
                throw new IllegalOperationError(className + " definition not found in " + swfLib);
            }
            return null;
        }
     
        private function completeHandler(e:Event):void {
            dispatchEvent(new Event(ClassLoader.CLASS_LOADED));
        }
     
        private function ioErrorHandler(e:Event):void {
            dispatchEvent(new Event(ClassLoader.LOAD_ERROR));
        }
     
        private function securityErrorHandler(e:Event):void {
            dispatchEvent(new Event(ClassLoader.LOAD_ERROR));
        }
    }
    Ensuite pour l'utiliser :

    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
     
    package {
        import flash.display.DisplayObject;
        import flash.display.Sprite;
        import flash.errors.IllegalOperationError;
        import flash.events.Event;
        import flash.text.TextField;
     
        public class ApplicationDomainExample extends Sprite {
            private var loader:ClassLoader;
            private var tf:TextField = new TextField();
     
            public function ApplicationDomainExample() {
                addChild(tf);
     
                loader = new ClassLoader();
                loader.addEventListener(ClassLoader.LOAD_ERROR,loadErrorHandler);
                loader.addEventListener(ClassLoader.CLASS_LOADED,classLoadedHandler);
                loader.load("RuntimeClasses.swf");
            }
     
            private function loadErrorHandler(e:Event):void {
                tf.text = "Load failed";
                throw new IllegalOperationError("Cannot load the specified file.");
            }
     
            private function classLoadedHandler(e:Event):void {
                var runtimeClassRef:Class = loader.getClass("RuntimeClasses");
                var greeter:Object = new runtimeClassRef();
     
                tf.text = greeter.greet();
            }
        }
    }
    Chez moi, l'exécution du handler classLoadedHandler ne compilait pas exactement.
    Mon code, pour cette fonction, ressemble plutôt à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private function classLoadedHandler(e:Event):void {
    	var runtimeClassRef:Class = loader.getClass('com.monPackage.MaClasse');
    	var greeter:Object = new runtimeClassRef();
     
    	tf.text = greeter['greet']();;
    }

Discussions similaires

  1. Accès aux movieClips de mon swf avec FLEX
    Par cashmoney dans le forum Flex
    Réponses: 1
    Dernier message: 09/10/2009, 17h21
  2. [newbie] Manipuler un swf depuis Flex builder 2
    Par doctornono dans le forum EDI/Outils
    Réponses: 7
    Dernier message: 04/09/2007, 18h30
  3. Manipulation de pixel avec Tcanvas
    Par spyk dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/04/2006, 12h29
  4. Manipulation de Recordset avec DAO
    Par Sinclar dans le forum VBA Access
    Réponses: 5
    Dernier message: 26/09/2005, 20h19

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