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

28déc/094

Flex Tips – Embed Font sur un TextField qui n'apparait pas

Un mini-post qui pourrait aider quelques Flexeurs sur un comportement assez étrange quand on utilise des polices embarquées (Embedded). Le code parait bon, pas d'erreur de compilation ni d'exécution mais pourtant le texte n'apparaît pas. J'ai bloqué une petite demi-heure sur ce bug stupide, cela vous arrivera peut-être ^^.

Voici le code que j'avais (réduit):

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="onCreationComplete();"
                xmlns:comp="comp.*"
                xmlns:local="*">
  <mx:Script>
    <![CDATA[
      import com.bg.BasicFontAssets;
      [Embed(systemFont='Arial', fontName='ArialR', mimeType='application/x-font', unicodeRange="U+0020-U+002F,  U+0030-U+0039, U+003A-U+0040, U+0041-U+005A,U+005B-U+0060, U+0061-U+007A, U+007B-U+007E,U+20AC-U+20AC,  U+00A3-U+00A3, U+00B2-U+00B2,U+00F9-U+00F9,  U+00E0-U+00F6")]
      public static var ArialR:Class;

      private function onCreationComplete():void {
        var format:TextFormat = new TextFormat;
        format.font = "ArialR";
        format.color = 0xFFFFFF;
        format.size = 20;

        var tf:TextField = new TextField;
        tf.embedFonts = true;
        tf.autoSize = TextFieldAutoSize.LEFT;
        tf.antiAliasType = AntiAliasType.ADVANCED;
        tf.text = "Text de test";
        tf.defaultTextFormat = format;
        uiComp.addChild(tf);
      }
    ]]>
  </mx:Script>
  <mx:UIComponent id="uiComp"
                  rotation="10"/>
</mx:Application>

Tout parait OK et pourtant rien de s'affiche. Le bug se situe en fait au moment de l'assignation du "defaultTextFormat". Celle-ci (qui indique que le font est Embed), est faite après l'assignation de la propriété "text". Pour résoudre ce bug, il suffit de:

  • Assigner "defaultTextFormat" avant "text"
  • ou faire l'assignation à la main: tf.setTextFormat(format).

A ce moment-là, votre champ texte va apparaître avec votre texte et vous pouvez passez au bug suivant :) .

21déc/091

Flex-tutorial.fr accessible depuis votre portable (iPhone, Android, Palm, …)

Pour Flex Tutorial, j'utilise la plateforme de blog WordPress, qui fait très bien le travail, à part quelques injections de spam dans mes fichiers de temps en temps, j'en suis globalement très satisfait. Grâce à un post de FlashXpress, j'ai découvert le plugin WPTouch qui est vraiment excellent. Comme la plupart des plugins WordPress, il suffit de l'uploader et de l'activer et le plugin fonctionne tout de suite.

WPTouch modifie votre l'affichage du blog uniquement pour les plateformes mobiles et suivant chaque plateforme. J'ai personnellement un G2 (Android) et cela fonctionne très bien, l'affichage est optimisé pour un affichage petite taille.

Plugin WPTouch pour WordPress

Testez par vous-même!

Remplis sous: Non classé 1 commentaire
21déc/0915

Flex 4 – Intégration Spring-Hibernate-BlazeDS-MySQL-Maven

Tutorial Flex écrit par Benjamin Michotte. Publiez vous aussi sur flex-tutorial!

Dans le cadre d'un projet professionnel, j'ai du mettre en place une infrastructure assez intéressante, mais également assez complexe à mettre en œuvre. Côté serveur, il s'agit d'un environnement Spring-Hibernate-BlazeDS-MySQL et côté client une interface Flex 4.

Ce tutoriel va vous expliquer comment créer ce genre de projet. Je me baserai sur le fait que vous avez des connaissances (même de base) dans ces différents framework. Si ce n'est pas le cas, je vous renvois aux différents sites des framework cités. Je vous invite également à lire d'abord les tutoriels de Fabien concernant BlazeDS.

Concernant les différents (nombreux) jars à télécharger côté serveur, je vous invite à vous rendre sur leurs site respectifs et suivre les dépendances. Un fichier de configuration Maven est disponible pour ceux qui l'utilise sur http://benjamin.produweb.eu/pom.xml. Notez que le fichier n'est en rien optimisé au niveau des dépendances, il a été créé en mode "ah, il me faut aussi ça, hop, je l'ajoute".

Versions utilisées pour ce tutoriel :

  • Spring 3.0.0RC2

Notez toutefois qu'entre la théorie et la pratique, il y a, malheureusement, quelques petites modifications (osons dire bidouillages) que vous devrez faire à cause de quelques bugs.

Vous remarquez également que nous créons un interface puis une classe l'implémentant pour le DAO et le Service, c'est dû à Spring et à son architecture (nécessité pour les @Autowired).

Création de notre projet Java

Côté serveur, nous allons créer une classe Produit (qui contient un id, un nom et un prix), un DAO qui implémentera les méthodes de base (ajout, suppression, listing, …) vers nos produits et un service que nous appellerons depuis Flex.

Produit.java

Une petite classe somme toute assez simple.

package tuto.pojo;

public class Produit
{
    private Long id;
    private String name;
    private Double price;

    public Produit()
    {
    }

    public Long getId()
    {
        return id;
    }

    public void setId(Long id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public Double getPrice()
    {
        return price;
    }

    public void setPrice(Double price)
    {
        this.price = price;
    }
}

Comme vous pouvez le voir, nous implémentons juste les méthodes get et set sur les champs de la classe. Nous laisserons Hibernate faire la magie du reste.
Pour cela, modifions notre classe pour expliquer à Hibernate quoi faire.

Tout d'abord, nous signalons que la classe Produit deviendra la table produits dans notre base de données.

@Entity
@Table(name = "produits")
public class Produit
{

Nous désignons également l'id en tant que tel, en spécifiant que Hibernate doit créer un id incrémental.

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
private Long id;
18déc/090

Flash Player 10.1 beta 2 et les versions FP 10.1 debugger sur Adobe Labs

Une bonne nouvelle cette fois d'Adobe qui annonce la sortie de Flash Player 10.1 beta 2 sur son blog. Il faut noter que cette beta 2 est cette fois accompagnée des versions debugger qui vont permettre de commencer à faire du vrai développement.

Télécharger Adobe Flash Player 10.1 beta 2 et versions debugger

Et surtout, cette version comprend le GEH (Global Error Handling) qui la raison principale qui va me pousser à imposer la présence de Flash Player 10.1 sur mes applications pro dans le futur (qui sont encore en FP9).

Voici un petit exemple qui permet de catcher n'importe qu'elle exception à l'exécution avec le GEH:

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="onApplicationComplete();">

    <mx:Script>
        <![CDATA[
            private function onApplicationComplete():void
            {
                loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, onUncaughtError);
            }

            private function onUncaughtError(e:UncaughtErrorEvent):void
            {
                // Do something with your error.
                if (e.error is Error)
                {
                    var error:Error = e.error as Error;
                    trace(error.errorID, error.name, error.message);
                }
                else
                {
                    var errorEvent:ErrorEvent = e.error as ErrorEvent;
                    trace(errorEvent.errorID);
                }
            }

            private function onCauseError(e:MouseEvent):void
            {
                var foo:String = null;
                try
                {
                    trace(foo.length);
                }
                catch (e:TypeError)
                {
                    trace("This error is caught.");
                }

                // Since this error isn't caught, it will cause the global error handler to fire.
                trace(foo.length);
            }
        ]]>
    </mx:Script>

    <mx:Button label="Cause TypeError" click="onCauseError(event);"/>

</mx:WindowedApplication>
18déc/090

Flash CS5: Pas de beta publique

Adobe l'a annoncé officiellement sur son blog, ils ne proposeront pas de version beta pour Flash Professional CS5. Cela va à l'encontre de ce qu'ils avaient annoncé à MAX en Octobre 2009. Les personnes qui s'étaient inscrit pour savoir quand la beta sera disponible ont eux, reçu un mail leur annonçant cette nouvelle.

D'après eux, les retours des utilisateurs de la pre-release sont très bons, on peut donc espérer une version qui n'arrivera pas trop tard en 2010. A mon avis (cela n'engage que moi), Adobe ne veut pas que tous les développeurs souhaitant bénéficier du Packager iPhone profitent de cette version beta (qui comporte donc des bugs) l'utilisent pour mettre des applications sur l'App Store qui seraient potentiellement buggées elles-aussi, question d'image.

Pas de cadeau de noël de la part d'Adobe :)