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

6fév/096

Composant Flex – TextArea qui s'adapte automatiquement à la taille du texte

Le composant TextArea Flex permet d'entrer du texte sur plusieurs lignes, pour un formulaire par exemple. L'inconvénient étant qu'il faut lui donner une taille, même si aucun texte n'est entré. On peut donc définir sa hauteur pour accepter un maximum de texte mais cela sera de la place perdue dans votre application. A l'inverse, si vous créez votre composant avec une petite hauteur, dès que l'utilisateur va mettre trop de texte, une scrollbar va apparaître, ce qui fait toujours un peu tâche.

Il existe donc une méthode qui permet en prenant le nombre de lignes en interne, et en multipliant par la hauteur d'une ligne (this.mx_internal::getTextField().getLineMetrics(i).height;), d'adapter la taille d'une TextArea. Processus un peu laborieux, surtout qu'il faut gérer le rafraichissement du composant etc.

Andrei Ionescu a crée un composant qui s'occupe de faire cette gymnastique interne tout seul. Voici le code du composant en question:

6fév/093

Flex ActionScript – Récupérer des éléments / attributs XML avec e4x avec n'importe quel namespace

Parser un xml avec e4x est vraiment simple. Il y a quelques jours, j'avais publié un article sur comment lire des attributs XML ayant un Namespace différent avec e4x. Mais dans certains cas, vous ne saurez pas forcement quels namespace vont être présents. Prenons comme exemple ce XML :

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <rdf:Description>
        <rdf:value>xxx</rdf:value>
    </rdf:Description>
</rdf:RDF>

Ici on peut voir que le namespace rdf (préfixe rdf) est défini par http://www.w3.org/1999/02/22-rdf-syntax-ns#. Pour accéder au nœud rdf:value, vous pouvez donc faire:

var rdf:Namespace = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#");
var attributes:XMLList = XML(event.result).rdf::Description.rdf::value;

Cette technique fonctionne car vous connaissez à l'avance le namespace qui sera utilisé. Mais vous pouvez utiliser un joker (*) pour que cela fonctionne dans n'importe quel cas:

var attributes:XMLList = XML(event.result).*::Description.*::value;
Remplis sous: WebService, XML 3 Commentaires
6fév/091

Flex Drag And Drop – Les évènements utilisables pour le Drag And Drop

Quand vous utilisez les capacités de Drag And Drop des composants Flex, le framework utilise plusieurs  évènements sans que vous le sachiez. Comprendre ces évènements vous permettra de modifier le comportement par défaut ou de coder complètement un drag and drop personnalisé.

Voici la liste des évènements, leurs cibles et ce qu'ils signifient:

  • mouseDown (Drag Initiator): C'est habituellement l'évènement qui déclenche le début d'une opération de drag and drop.
  • mouseMove (Drag Initiator): Dans certains cas, une opération de Drag And Drop ne peut se faire sans event mouseMove
  • dragEnter (Drop target): La souris est entrée dans la zone où il est possible de dépose, toujours en déplacant l'objet
  • dragMove (Drop target): La souris se déplace à l'intérieur de la zone cible. C'est un évènement similaire ou mouseMove sauf qu'il spécifie le composant cible (drop target)
  • dragExit (Drop target): La souris a été déplacée en dehors de la zone de drop,  toujours en déplacant l'objet
  • dragDrop (Drop target): L'utilisateur a lâché un objet sur la cible
  • dragComplete (Drag Initiator): Cet évènement se produit à chaque fois que l'utilisateur lâche l'objet, qu'il soit sur une drop zone ou pas.

Les évènements mouseDown et mouseMove sont des évènements standard de Flash Player, de type flash.event.MouseEvent. Le reste des évènements fait partie du framework Flex, et ils sont de type mx.events.DragEvent. Les objets DragEvent ont une propriété dragInitiator que donne une référence vers le composant d'où le drag and drop est parti. Ils ont aussi une propriété dragSource, de type mx.core.DragSource, qui contient la data copiée depuis le dragInitiator.

Les objets DragSource ont une méthode dataForFormat() qui requiert un paramètre (String) et retourne la donnée qui était stockée pour le format spécifié. Il y aura un tutorial à ce sujet. Pour le moment, vous devez savoir que les drag initiator de type liste créent toujours des objets DragSource avec un format appelé "items", et la donnée retournée par ce format est un Array de tous les éléments du data provider correspondant à la sélection de l'utilisateur. Par exemple, si l'utilisateur déplace un seul élément d'une DataGrid, l'objet DragSource contiendra un Array avec juste un élément.