• › Connexion
  • Blog RIA.do.be
  • Blog Web2Entreprise
Section separator

Catégories

  • Annonces
  • Évènements
  • Concepts et Usages
  • Général
  • Notes Techniques
  • Références
Adobe EMEA Silver Solution Partner Section separator

Abonnement

  • RSS Articles Articles (RSS)
  • RSS Articles Commentaires (RSS)
  • RSS mail Articles (Email)
  • Populaires
  • Récents
  • Commentaires
  • Premiers Retours sur l’Adobe MAX 2009 (vu 13 005 fois)
  • Comment forcer les styles des composants Flex/AS3 d’une librairie SWC réutilisable (vu 5 767 fois)
  • Utiliser le framework Cairngorm pour Flex 2 (1/4) (vu 5 429 fois)
  • Architecture MVC: Cairngorm ou PureMVC ? (vu 3 256 fois)
  • Le problème du ModelLocator Cairngorm (vu 3 063 fois)
Articles récents
  • Ouverture des inscriptions pour le webinar ConfluenceFx
  • Développeur, Communicant, Designer ou Ergonome ? Changez pour Kap IT
  • Application AIR : Comment Sauvegarder/Charger un Document et lui Associer une Extension ?
  • Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • Premiers Retours sur l’Adobe MAX 2009
Commentaires récents
  • Fadi Mansour dans Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • nico dans Détection de l’Événement « Coller » avec Flex Builder 3 et Flash Player 9
  • Florian dans Application AIR : Comment Sauvegarder/Charger un Document et lui Associer une Extension ?
  • Fadi Mansour dans Comment intégrer une application Flex dans une application Flash ou AS3
  • yoann dans Comment intégrer une application Flex dans une application Flash ou AS3

Auteurs

  • Alexis Kartmann (12)
  • Benoit Kogut-Kubiak (2)
  • Christoher Bograt (1)
  • Cyril Daloz (7)
  • Daniel Pesic (5)
  • Fadi Mansour (3)
  • Florian Fesseler (1)
  • Guillaume Mignard (2)
  • Jean de Laulanié (2)
  • Julien Revel (19)
  • Mahmoud Ramadan (1)
  • Matthieu Jobert (1)
  • Stéphane Guyot (1)
  • Stéphane Koëth (2)
  • Yann Graufogel (2)
Section separator

Tags

compilation AIR RIA kapinspect builder RTMP Corporate Web 2.0 fds LCDS Adobe MAX MVC Kap IT AS3 skin BlazeDS livecycle actionscript PureMVC Cairngorm JVM Kap Lab Framework AMF Flex
Section separator

Archives

  • février 2010 (1)
  • décembre 2009 (2)
  • novembre 2009 (1)
  • octobre 2009 (3)
  • septembre 2009 (1)
  • août 2009 (1)
  • avril 2009 (2)
  • février 2009 (2)
  • janvier 2009 (4)
  • décembre 2008 (4)
  • novembre 2008 (2)
  • octobre 2008 (2)
  • septembre 2008 (2)
  • août 2008 (1)
  • juin 2008 (1)
  • avril 2008 (4)
  • mars 2008 (3)
  • février 2008 (2)
  • janvier 2008 (1)
  • décembre 2007 (3)
  • novembre 2007 (1)
  • septembre 2007 (1)
  • juillet 2007 (1)
  • juin 2007 (1)
  • mai 2007 (4)
  • avril 2007 (8)
  • mars 2007 (2)
  • février 2007 (1)

Marque-pages

  • Adobe Labs
  • AStrois Blog
  • Code moi un mouton
  • Coma Informatique
Section separator

Kap IT

  • Site Web
  • Blog Web2Entreprise
  • Blog RIA.do.be
  • Lab

Blog RIA.do.be

Veille, Recherche et Développement RIA Flex-AS3-LiveCycle

Comment intégrer une application Flex dans une application Flash ou AS3

Par Fadi MansourgravatarFermerAuteur : Fadi Mansour Email : fmansour@kapit.fr
Site : http://kapit.fr
A propos : Voir les autres billets de l'auteur (3)
, publié le 10 octobre 2008

Imaginez que vous développez une application AS3 dans Flash et que vous voulez ajouter un formulaire. Vous aimeriez développer ce formulaire en utilisant les puissantes bibliothèques de Flex. Normalement ce n’est pas possible. Nous allons expliquer comment contourner cette limite.

Principe

Le problème vient du mécanisme de chargement d’une application Flex  pour initialiser le Framework. Il est possible de reproduire ce mécanisme dans une application Flash une fois qu’on a compris son principe.

Voici le principe :

  • Compiler une application Flex contenant le formulaire (ou tout autre application) pour obtenir un fichier SWF.
  • Charger le fichier SWF de l’application Flex dans l’application Flash.
  • Attendre la fin de l’initialisation de l’application Flex et récupérer l’objet application.
  • Utiliser l’objet application pour interagir avec le formulaire.

Mise en œuvre

Classe utilitaire de chargement

Nous allons écrire une classe utilitaire dérivée de MovieClip qui permettra de charger l’application Flex, l’initialiser et enfin l’afficher.

La classe « Loader » du package flash.display est utilisée pour charger des fichiers swf et des images. La fonction load() de cette classe prend en paramètre un URLRequest qui prend en paramètre le chemin vers le fichier swf ou bien l’image à charger.

A partir de la propriété « contentLoaderInfo » de la classe Loader qui retourne un objet « LoaderInfo », nous pouvons avoir des informations sur le swf chargé. Les informations fournies incluent la progression du chargement, l’URL du chargeur et le contenu chargé, et le nombre d’octets de médias chargés.

L’objet LoaderInfo déclenche un événement lors du chargement de swf ou bien d’une image, cet événement peut être un « Event.COMPLETE » lorsque le chargement a réussi ou bien un « IOErrorEvent.IO_ERROR » lorsque le chargement échoue.

public function FlexAS3Loader(url:String)
{
__loader = new Loader();
var info:LoaderInfo = __loader.contentLoaderInfo;
info.addEventListener(Event.COMPLETE, onComplete);
info.addEventListener(IOErrorEvent.IO_ERROR , onIOError );
var urlRequest:URLRequest = new URLRequest(url);
var loaderContext:LoaderContext = new LoaderContext();
loaderContext.applicationDomain = ApplicationDomain.currentDomain;
__loader.load(urlRequest, loaderContext);
}

Une fois l’événement COMPLETE capté, l’objet Loader est ajouté au stage. Une fois ces procédures effectuées nous pouvons voir l’application Flex s’afficher dans le Flash player. Cependant nous n’avons pas encore accès aux différentes propriétés de l’application.

Une application Flex a deux « frames », la première est pour le chargement et il faut attendre la deuxième frame pour pouvoir faire référence à l’application et accéder aux différentes propriétés.

Pour cela, nous avons créé un objet de type MovieClip et nous lui avons affecté le contenu de Loader, et nous avons ajouté un listener «Event.ENTER_FRAME » sur cet objet.

private function onComplete(_evt:Event):void
{
addChild(__loader);
__loadedClip = __loader.content as MovieClip;
__loadedClip.addEventListener(Event.ENTER_FRAME, onFlexAppLoaded);
}

Cet événement va être capté deux fois parce que - comme nous l’avons déjà vu - une application Flex a deux frames. La deuxième fois que cet événement est capté nous aurons accès à l’application Flex.

private function onFlexAppLoaded(_evt:Event):void
{
//application is a property of mx.managers.SystemManager and it represents the application parented by the SystemManager
//The first time we enter this function the property application will be null and the second time application will contain the Flex application
if( __loadedClip.application != null )
{
__loadedClip.removeEventListener(Event.ENTER_FRAME, onFlexAppLoaded);
application = __loadedClip.application;
dispatchEvent(new Event("FlexAppLoadingDone"));
}
}
Exemple d’utilisation

Pour illustrer le chargement d’une application Flex dans une application Flash, nous avons créé un formulaire en Flex “FormulaireFlex.mxml”. Ce formulaire est chargé dans une application Flash “FormulaireFlexIntoAS3.as” en utilisant la classe “FlexAS3Loader.as” dont le fonctionnement a déjà été expliqué.

public function FormulaireFlexIntoAS3()
{
fal = new FlexAS3Loader("FormulaireFlex.swf");
addChild(fal);
fal.addEventListener("FlexAppLoadingDone", _onFlexAppLoaded);
}

Une fois le chargement du formulaire réussi, la classe FlexAS3Loader déclenche l’événement “FlexAppLoadingDone”.

Une fois les champs dans le formulaire saisis correctement un événement “showButton” est déclenché.

private function validChange(event:ValidationResultEvent):void
{
if(fname.text.length != 0 && dob.text.length !=0 && email.text.length != 0 && age.text.length != 0 && ssn.text.length != 0 && zip.text.length != 0 && phone.text.length != 0 && !valid)
{
dispatchEvent(new Event('showButton'));
valid = true;
}
}

Cet événement va être capté dans l’application Flash et un bouton sera affiché.

private function showButton(e:Event):void
{
button = new myButton();
button.y = 350;
button.x = 200;
button.addEventListener(MouseEvent.CLICK, initializeForm);
addChild(button);
}

Le click du bouton va réinitialiser le formulaire. Dans notre exemple nous accédons aux différents champs de formulaire à partir de l’application Flash et en les réinitialisant.

private function initializeForm(e:MouseEvent):void
{
fal.application.fname.text = "";
fal.application.dob.text = "";
fal.application.email.text = "";
fal.application.age.text = "";
fal.application.ssn.text = "";
fal.application.zip.text = "";
fal.application.phone.text = "";
}

Une façon plus simple de faire cela sera de déclencher un événement à partir de l’application Flash qui sera capté par l’application Flex. Cet événement sera responsable d’appeler une fonction qui va réinitialiser les champs de formulaire.

Téléchargement

Le code source du programme Flash
Le code source du Formulaire Flex

Conclusion

Cette méthode présente aussi l’avantage de retarder le chargement du Framework Flex dont le poids est souvent un frein à son utilisation dans un site à fort trafic par rapport à de l’AS3 pur.
On peut ainsi avoir le meilleur des deux mondes : une application AS3 très vite chargée à l’affichage du site, et des formulaires riches très vite développés qui sont chargés lorsque nécessaire.

Articles relatifs

  • Utilisation d’un TreeMap en Flex et en as3 : À la découverte des classes AS3 du package mx du framework Flex (0)
  • Tout Savoir sur les Fuites Mémoires (ou Memory Leak) en Flex (0)
  • MAX2007 : utilisation des meta données en Flex (0)
  • Les objets en Flex / AS3 - deuxième partie: Accès aux propriétés, notation pointée et notation indexée [] (6)
  • Les objets dans Flex 2: Première partie - De la dualité MXML / AS3 (1)
Catégories: Notes Techniques
Tags: AS3, flash, Flex, Loader, SWF, SystemManager

2 commentaires sur “Comment intégrer une application Flex dans une application Flash ou AS3”

  1. yoann dit :
    21 octobre 2009 à 14:36

    Bonjour,

    J’aimerai savoir comment faire pour ajouter un bouton par exemple au formulaire donné en exemple.

    Pour le moment avec la propriété AddChild a la propriété application j’obtiens l’erreur suivante.

    TypeError: Error #1007: Tentative d’instanciation sur un élément non constructeur.
    at mx.preloaders::Preloader/initialize()[E:\dev\gumbo_beta2\frameworks\projects\framework\src\mx\preloaders\Preloader.as:253]
    at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::initialize()[E:\dev\gumbo_beta2\frameworks\projects\framework\src\mx\managers\SystemManager.as:1923]
    at mx.managers::SystemManager/initHandler()[E:\dev\gumbo_beta2\frameworks\projects\framework\src\mx\managers\SystemManager.as:2412]

    Mon projet est en pure AS3

    Merci d’avance

  2. Fadi Mansour dit :
    27 octobre 2009 à 23:01

    Bonjour Yoan,

    La solution présentée ci-dessus est pour montrer comment faire pour communiquer entre un appication Flash et une application Flex. Du coup la création d’un composant à base du UIComponent coté Flash et de l’ajouter dans l’application Flex ne passera pas.

    Une solution sera de créer une fonction coté Flex par example:

    public function addButton(label:String, parent:String):void
    {
    var b:Button = new Button()
    b.label = label;
    this[parent].addChild(b);
    }
    

    label c’est le label à afficher dans le bouton et parent c’est l’id du composant parent où il faut ajouter le bouton.

    Coté Flash nous appelons cette fonction. Dans l’exemple ci-dessus nous ajouterons dans la fonction initializeForm la ligne suivante:

    fal.application.addButton('hello', 'myForm');
    

    J’espère avoir répondu à ta question.

Laisser une réponse

Cliquer ici pour annuler la réponse.

Article précédent
Article suivant
 
Haut de page

Copyright © 2009 Kap IT - Blog RIA - Blog Web2Entreprise - Kap Lab

Motorisé par Wordpress - Thème avec YAML par Kap IT