Apache Adobe Flex TutorialTutoriaux Adobe Flex & AIR en Français

18nov/102

Détecter le click sur un lien dans un texte HTML (TextEvent.LINK)

Tutorial Flex écrit par Laurent Wroblewski (http://flex-ria.fr/)
Publiez vous aussi sur flex-tutorial!

Vous utilisez le composant Flex Label (ou les composants qui l'étendent, comme Text), et vous souhaitez pouvoir réagir à un clic sur une portion
de son contenu? Pas si simple!

Imaginons un label doté du texte suivant : "Ceci est un exemple de LIEN vers une image!". Vous souhaitez qu'un clic sur le mot "LIEN" entraîne l'affichage d'une image à l'écran. Pour ce faire, nous allons passer par la propriété htmlText du composant et utiliser des balises HTML <a> pour encadrer le mot "LIEN". Seul petit problème, en utilisant cette balise de manière traditionelle (ex : <a href='assets/test.jpg'>), un clic sur le texte redirigera la page vers le lien inséré (dans notre exemple, vers
l'image assets/test.jpg). Pas vraiment ce que nous voulons...

L'astuce ici est d'utiliser cette syntaxe :

<a href='event:assets/test.jpg'>

Ainsi, un clic sur le texte entraînera le dispatch d'un événement de type TextEvent.LINK depuis votre composant Label, que vous aurez tout loisir de capturer au sein d'un handler pour effectuer un traitement de votre choix.

IMPORTANT : pour qu'un événement de type TextEvent.LINK soit dispatché depuis un Label, la propriété selectable de celui-ci doit être à true.

<mx:Script>
    <![CDATA[
        private function txtExemple_LinkHandler(evt:TextEvent):void
        {
            trace(evt.text);
        }

        private function txtExemple_InitializeHandler(evt:Event):void
        {
            this.txtExemple.htmlText = "Ceci est un exemple de <a href='event:assets/test.jpeg'>LIEN</a> vers une image!";
        }
    ]]>
</mx:Script>

<mx:Text id="txtExemple"
    initialize="txtExemple_InitializeHandler(event)"
    link="txtExemple_LinkHandler(event)"
    selectable="true"
    />

Dans l'exemple ci-dessus, en imaginant que l'utilisateur clique sur le mot "lien" du texte du composant txtExemple, un événement de type TextEvent sera dispatché, dont la propriété text sera égale à assets/test.jpeg. Après, libre à vous d'effectuer le traitement que vous souhaitez.

L'exemple ci-dessous va créer une image dont l'url sera renseignée dans le lien, et l'afficher dans l'application à la position du pointeur de la souris.
Un second clic sur l'image fera disparaître celle-ci. Attention, pour que l'image se positionne correctement, il faut que son container (dans mon cas l'Application) ait un layout de type absolute (un Canvas par exemple).

private var _image:Image;

private function txtExemple_LinkHandler(evt:TextEvent):void
{
    if (!this._image)
    {
        this._image = new Image();
        this.addChild(this._image);
    }
    this._image.source = evt.text;
    this._image.x = this.contentMouseX;
    this._image.y = this.contentMouseY;
    this._image.visible = this._image.includeInLayout = true;
    this._image.useHandCursor = this._image.buttonMode = true;
    this._image.addEventListener(MouseEvent.CLICK, image_ClickHandler, false, 0, true);
}

private function image_ClickHandler(evt:MouseEvent):void
{
    this._image.visible = this._image.includeInLayout = false;
}

Exemple en ligne

Flex Source Code Download: Télécharger le code source complet de l'application

This movie requires Flash Player 11

24sept/100

Flex Tooltip – Texte HTML (et images) dans un tooltip Flex

Les tooltips Flex peuvent être ajoutés sur tous les composants visuels Flex. Au survol, une info-bulle apparait avec le texte spécifié. Cela peut permettre de sauver de la place en y mettant un texte explicatif que l'utilisateur ne voit que lorsqu'il se déplace sur une zone / un composant.

Flex ToolTip – Ajouter des ToolTips à vos composants

Pour les harmoniser avec votre application, vous pouvez leur appliquer un style. Mais ces propriétés de style ne vont pas bien loin.

Heureusement, on peut aller encore plus loin en intégrant du texte HTML. Vous pourrez ainsi afficher des informations en gras ou en couleur. Vous pouvez en fait intégrer toutes les balises gérées par la propriété htmlText de la classe Text. Y compris le tag <img> qui va vous permettre d'afficher des images dans les info-bulles:

Sans titre-3

Voir les sources

Voir l'article original: Easy Flex ToolTip customization using HTML tags

24mar/106

Flash Builder 4 – Apparition de Scrollbar HTML sous Firefox quand le SWF prend le focus [Résolu]

Petite surprise après avoir lancé mon Hello World avec seulement un bouton dans mon application développée avec Flash Builder 4. Après avoir cliqué sur le bouton (et donc sur mon application Flex), deux scrollbar HTML apparaissent (pour combler une infime différence). Après test sous IE, je n'obtenais pas le même problème.

Pas de panique, c'est simplement un petit souci dans le nouveau fichier /html-template/index.template.html de Flash Builder 4. Voici le tag <style> CSS qu'il va appliquer à votre page HTML:

<style type="text/css" media="screen">
 html, body    { height:100%; }
 body { margin:0; padding:0; overflow:auto; text-align:center;
 background-color: ${bgcolor}; }
 #flashContent { display:none; }
 </style>

Et voici celui qui était utilisé dans Flex Builder 3:

<style>
body { margin: 0px; overflow:hidden }
</style>

Vous avez compris ce qui cloche, c'est bien la propriété overflow qu'il faut passer à "hidden" et pas à "auto". A partir de là, tout rentre dans l'ordre:

<style type="text/css" media="screen">
 html, body    { height:100%; }
 body { margin:0; padding:0; overflow:hidden; text-align:center;
 background-color: ${bgcolor}; }
 #flashContent { display:none; }
</style>

Télécharger Flash Builder 4

21avr/093

Flex Localization – Pré-chargement de Resource Modules (preload)

Vous pouvez charger un Resource Module quand l'application démarre en appelant la méthode loadResourceModule() au moment de l'évènement initialize, et en spécifiant une valeur pour la propriété localeChain une fois que le module est chargé. C'est utile si vous avez une langue par défaut et que vous voulez que tous les utilisateurs démarrent avec cette langue.

Vous pouvez aussi spécifier la locale que l'application va charger par défaut en la passant en FlashVars dans le conteneur HTML.

Voici les variables flashVars que vous devez passer pour précharger les Resource Modules:

  • localeChain: Une liste (séparateur ",") de locale pour l'initialisation de la propriété localeChain de la classe ResourceManager. Si la propriété localeChain n'est pas explicitement fixée, localeChain sera initialisée avec la valeur passée dans l'option -locale du compilateur
  • resourceModuleURLs: Une list (séparateur ",") d'URL depuis lesquelles les Resource Module seront chargés. Les resource Modules sont chargés pas la même classe que les RSLs, mais sont chargés après les RSLs. Ces URLs peuvent être relatives ou absolues

Comme pour des paramètres dans une URL, vous devez séparer ces valeurs par un "&" et vous devez vous assurer que les caractères sont bien encodés.

25fév/099

Adobe Air – Composant mx:HTML avec contenu SWF et Garbage Collection

Aujourd'hui, je suis tombé sur cet article de Gregory Wilson expliquant les problèmes de fuites mémoire (memory leak) rencontrés avec l'application Adobe Air Tour de Flex. Pour ceux qui ne connaissent pas Tour de Flex, c'est une application Air pour montrer les capacités du SDK Flex avec des applications exemple (et le code source). Si vous ne l'avez pas encore sur votre poste, je vous la conseille vivement:

Télécharger l'application Tour de Flex (Adobe Air)

L'application Tour de Flex utilise un composant <mx:HTML> (qui fait partie du SDK Air) permettant d'afficher des pages HTML dans une application. Dans ce cas précis, il est surtout utilisé pour afficher du contenu SWF (pris depuis un page HTML classique). Si vous jouez un peu avec l'application, vous vous rendrez compte qu'elle monte très rapidement en RAM, à cause principalement d'une fuite mémoire (Memory Leak).

Au passage, si vous voulez en apprendre plus sur la gestion des ressources AS3 et le Garbage Collector, je vous conseille vivement de lire ces articles:

Flex Debug - Garbage Collector AS3 et Flash Player 9

Flex Debug - Garbage Collector AS3: Gestion des ressources

Gregory Wilson a donc identifié cette fuite mémoire du composant <mx:HTML> et cela pourra vous être utile si votre application Adobe Air utilise elle aussi ce composant.  Pour résumer le problème, si un composant mx:HTML charge une page avec du contenu Flash (SWF), le composant ne peut pas être libéré d'un point de vue mémoire, même si vous le supprimez de son conteneur, lui enlevez ses références, etc. Le contenu Flash continue de s'exécuter.

Pour résoudre ce problème, il faut fixer l'attribut "htmlText" à une chaîne vide("") et le Garbage Collector pourra passer.