Master HTML formaté le texte dans Flash

Nous allons voir comment afficher du texte au format HTML chargé à partir de XML, stylé à partir d'une feuille de style CSS externe avec des polices chargées à l'exécution. Nous allons également maîtriser le placement d'image en ligne via le code HTML balise incorporée et ajout d'événements personnalisés aux liens de texte HTML.


Étape 1: Pourquoi utiliser du texte au format HTML et des ressources externes?

Il est certainement facile de conserver tous les actifs directement dans le fichier source Flash lui-même, et cela peut parfois être la meilleure solution. Cependant, il existe de bonnes raisons de séparer autant de contenu que possible de votre document Flash, ou même de garder votre source Flash uniquement composée uniquement d'ActionScript..

  1. Votre fichier SWF se chargera plus rapidement. En séparant le contenu du fichier Flash, vous ne pouvez charger que les actifs dont vous avez besoin au moment de l'exécution, ce qui permet de diffuser votre contenu plus rapidement..
  2. Les mises à jour sont plus faciles. Au lieu de demander à un développeur Flash d’ouvrir le fichier .fla et de republier, il suffit de modifier le code HTML ou CSS..
  3. Applications multiples. Le contenu externe peut être utilisé pour d'autres applications, par exemple pour créer une version HTML5 du site pour l'iPad..
  4. POO. Mieux encore, séparer le contenu de l'application de diffusion est une bonne programmation orientée objet. Des méthodes comme celle-ci sont les éléments de base pour développer des systèmes, des modèles et des composants pour une réutilisation et un développement rapide.

Étape 2: Configurez le répertoire de paquets

Étant donné que nous allons utiliser divers actifs, il est utile de configurer une structure de répertoires de fichiers bien organisée. Tout d'abord, nous créons un répertoire de projet "HTMLTextBlock". Dans ce cadre, ajoutez un dossier "source" et un dossier "deploy". Dans déployer, notre fichier SWF sera situé au niveau supérieur avec des dossiers pour chaque type de contenu. Dans cette démonstration, nous allons créer un fichier SWF qui charge les polices, CSS, XML et une image. Le dossier source contiendra tous nos fichiers .fla et .as, que nous créerons plus tard. Pour le moment, votre répertoire de projet devrait ressembler à ceci:


Étape 3: Choisissez vos polices

Avant d’intégrer des polices sur votre site Web, il est important de connaître les licences de polices. Ce n’est pas parce que vous avez une police installée, même si vous avez les droits d’utiliser pour l’impression, que vous avez l’autorisation de l’utiliser en ligne. Pour plus d'informations sur les licences de polices, consultez cet article Themeforest..

Dans ce tutoriel, nous allons utiliser deux polices, une pour le titre et une pour le corps du texte. Le répertoire de polices de Google est un bon endroit pour trouver des polices open source de haute qualité. Vous ne pouvez pas télécharger les fichiers de polices directement à partir de là, mais vous pouvez les trouver facilement avec une recherche sur le Web. Font Squirrel et Typekit sont deux autres excellentes ressources pour les polices de haute qualité..

Lorsque vous choisissez une police de titre, recherchez un style qui exprime la personnalité de votre conception. Pour le corps du texte, la lisibilité est très importante, utilisez donc une police qui s’affiche correctement dans les petites tailles. Assurez-vous également de choisir une famille de polices avec des caractères gras, italiques et gras italiques. Pour ce didacticiel, nous utiliserons la police Lobster de Pablo Impallari pour les titres et la famille de polices Droid Serif de Steve Matteson pour les paragraphes..

Des recherches rapides en ligne indiquent où nous pouvons télécharger la police Lobster et la famille de polices Droid Serif. Dans notre la source répertoire, créer un nouveau dossier "polices téléchargées" et y placer les fichiers de polices.


Étape 4: Création de fichiers SWF pour l'intégration de polices d'exécution

Activez les polices sur votre système. Ouvrez deux nouveaux documents Flash ActionScript 3.0, un pour chaque police, et enregistrez-les sur le la source annuaire. Nous allons commencer par la police de titre. Dans le panneau Bibliothèque, sélectionnez "Nouvelle police…" et dans le menu Famille liste déroulante, sélectionnez Homard 1.4. Sous le nom, tapez "Homard". Pour Gammes de caractères, vérifier Tout. Remarque: si vous utilisez une police pour laquelle vous savez que vous n'utiliserez pas certains caractères, vous pouvez choisir d'incorporer un sous-ensemble de glyphes à partir de la police, ce qui diminue la taille du fichier SWF..

Ensuite, accédez à l'onglet ActionScript. Sous Lien, sélectionner Exporter pour ActionScript. Quand tu fais, Exporter au cadre 1 sera vérifié, et le Classe et Classe de base les identifiants seront renseignés. Cliquez sur Terminé. Si vous recevez un avertissement indiquant que la définition de la classe n'a pas été trouvée, ignorez-la..

Ensuite, dans le panneau Paramètres de publication, décochez la case HTML case à cocher et, dans la Flash champ, cible le les polices dossier dans le déployer répertoire en entrant "… /deploy/fonts/Lobster.swf". C’est tout ce qui est nécessaire pour intégrer une police dans un fichier SWF..

Cependant, si nous voulons pouvoir charger le fichier SWF dans un autre fichier SWF et utiliser ses polices incorporées au moment de l'exécution, nous devons enregistrer la police. Donc, dans le panneau Actions, nous devons ajouter un code de ligne à l'image 1 du scénario:

 Font.registerFont (Homard);

Notre police sera désormais disponible dans tous les documents Flash chargés dans le fichier SWF. Nous pourrions avoir terminé ici, mais nous voulons vérifier notre travail et, plus important encore, obtenir le nom de famille de police correct à utiliser dans notre code CSS. Ajouter un peu plus de code.

 var embeddedFonts: Array = Font.enumerateFonts (false); pour chaque (var police: Font dans embeddedFonts) trace ("Font Embedded:" + font.fontName); 

Exécutez Publier l'aperçu et nous verrons le message ci-dessous dans le journal de sortie. Prenez note du nom de la police. Nous en aurons besoin plus tard.

 Police incorporée: Lobster 1.4 Police incorporée: Lobster 1.4

Vous pourriez vous demander pourquoi nous voyons deux déclarations de trace. Cela est dû à registerFont () méthode incorporant la police une seconde fois.

 Font.registerFont (DroidSerifRegular); Font.registerFont (DroidSerifBold); Font.registerFont (DroidSerifItalic); Font.registerFont (DroidSerifBoldItalic); var embeddedFonts: Array = Font.enumerateFonts (false); pour chaque (var police: Font dans embeddedFonts) trace ("Font Embedded:" + font.fontName + "" + font.fontStyle); 

Ensuite, nous allons créer un fichier SWF pour la copie de corps. Cette fois, nous intégrons quatre polices, une pour chaque style. Dans notre deuxième document Flash, à nouveau dans le panneau Bibliothèque, sélectionnez Nouvelle police… Dans le menu déroulant Famille, sélectionnez Droid Serif et, pour Style, sélectionnez Normal. Tapez "DroidSerifRegular" dans le champ Nom et n'oubliez pas de définir Exporter pour ActionScript. Répétez ensuite les mêmes étapes pour les plages de caractères et l'onglet ActionScript. Répétez cette procédure pour les faces en gras gras, italique et italique. Dans le panneau des actions, nous utiliserons un code similaire à celui utilisé pour la police Lobster..

Exécuter l'aperçu de publication. Cette fois, nous verrons des messages de trace pour chacun des styles de police Droid Serif. Si vous en voyez moins de huit, vérifiez les paramètres de police dans le panneau Bibliothèque, car l'une des faces de la police n'est pas en cours d'intégration. Encore une fois, notez le nom de la police dans le journal de sortie..

 Police incorporée: Droid Serif normal Police incorporée: Droid Serif bold Police incorporée: Droid Serif italic Police incorporée: Droid Serif boldItalic Police incorporée: Droid Serif italic Police incorporée: Droid Serif bold Police incorporée: Droid Serif regular Police incorporée: Droid Serif boldItalic

Maintenant, publiez la police Droid Serif sur "… /deploy/fonts/DroidSerif.swf" et nous devrions maintenant avoir deux fichiers SWF de polices., Homard.swf et DroidSerif.swf, dans le déployer / polices annuaire.


Étape 5: Mettre du HTML en XML

Le prochain élément que nous allons créer est un fichier XML. Le XML sera composé d'un élément: un bloc de texte au format HTML, composé d'un titre et d'un paragraphe construit avec le balisage HTML standard.

Pour que Flash puisse lire le code HTML sous la forme d'une entité d'élément XML, il doit être contenu dans un wrapper CDATA. CDATA est utilisé dans les documents XML pour indiquer qu'une section de contenu doit être analysée en tant que données de caractère au lieu de balisage..

   TextField formaté au format HTML redimensionnable avec incorporation de polices d'exécution et style CSS 

Voici un exemple de champ de texte contenant une image en ligne. Le texte a été chargé à partir d'un fichier XML et est stylé avec une feuille de style css externe. La famille de polices Droid Serif, référencée par le css, a été chargée à l'exécution. Les styles disponibles pour Droid Serif sont audacieux, italique et gras italique. Droid Serif a été créé par Steve Matteson. La police de titre, Lobster, a été créée par Pablo Impallari.

]]>

Enregistrez ce fichier sous le nom "content.xml" dans le répertoire. xml dossier dans le déployer annuaire


Étape 6: Créer une feuille de style CSS

Maintenant, nous allons créer CSS pour styler le HTML. En regardant notre HTML, nous pouvons voir que nous devons créer un style pour h1, p et une. Le texte entre les balises bold et italic (b et je) sera automatiquement nommé puisque ces styles sont présents dans notre famille de polices de paragraphe. Notez que vous ne devez pas oublier que Flash ne prend en charge qu'un sous-ensemble de propriétés CSS. reportez-vous au manuel de référence ActionScript 3.0 pour plus de détails..

Il est particulièrement important de cibler le nom de famille de police correct dans le fichier CSS. Veillez à utiliser le nom de police affiché dans le journal de sortie lorsque nous avons publié les documents relatifs aux polices (Homard 1.4 et Droid Serif).

 h1 font-family: Lobster 1.4; taille de police: 24; couleur: # 990033;  p font-family: Droid Serif; taille de police: 14; couleur: # 333333; menant: 4;  a color: # 000000; texte-décoration: souligné; 

Enregistrez ce fichier sous "styles.css" dans le répertoire css dossier dans le déployer annuaire


Étape 7: Créer la classe de document

Créez un nouveau fichier Flash et enregistrez-le sous le nom "HTMLTextBlockExample.fla" dans le répertoire. la source annuaire. Dans le panneau Paramètres de publication, ciblez notre déployer dossier. Pour HTML, utilisez "… /deploy/index.html" au lieu du nom par défaut. Créez un nouveau fichier .as - "HTMLTextBlockExample.as" - qui deviendra la classe de document (reportez-vous à cette astuce pour en savoir plus sur les classes de document).

 package import flash.display.MovieClip; Classe publique HTMLTextBlockExample étend MovieClip fonction publique HTMLTextBlockExample (): void 

Étape 8: chargez les polices

Nous allons ensuite charger les fichiers SWF de polices que nous avons créés dans notre document Flash. Créons deux variables. On sera un Tableau des chaînes d'URL pour chaque police SWF, et l'autre sera un int cela gardera une trace du nombre de polices chargées. Ensuite, nous allons créer différentes méthodes pour gérer le chargement.

 package import flash.display.Loader; import flash.display.MovieClip; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLRequest; Classe publique HTMLTextBlockExample étend MovieClip polices var publiques: Tableau / * de chaîne * / = ["polices / DroidSerif.swf", "polices / Lobster.swf"]; public var fontsLoaded: int = 0; fonction publique HTMLTextBlockExample (): void loadFonts ();  function privée loadFonts (): void pour chaque (var fontURL: String dans les polices) var fontLoader: Loader = new Loader (); fontLoader.contentLoaderInfo.addEventListener (Event.COMPLETE, onFontLoaded); fontLoader.contentLoaderInfo.addEventListener (IOErrorEvent.IO_ERROR, onFontLoadError); fontLoader.load (new URLRequest (fontURL));  fonction privée onFontLoadError (event: IOErrorEvent): void trace ("ERREUR: impossible de trouver la police" + event.target.loaderURL);  fonction privée onFontLoaded (event: Event): void fontsLoaded ++; if (fontsLoaded == fonts.length) onFontsLoadComplete ();  fonction privée onFontsLoadComplete (): void trace (fonts.length + "les polices ont été chargées"); 

Exécuter l'aperçu de publication et vérifier que les deux polices sont chargées.


Étape 9: chargez le XML et le CSS

Le chargement des fichiers XML et CSS sera un processus similaire au chargement des polices. Tout d'abord, nous devons importer de nouvelles classes.

 import flash.net.URLLoader; import flash.text.StyleSheet;

Nous allons également créer un nouveau Feuille de style variable qui contiendra les propriétés de style analysées à partir du fichier css.

 public var textStyleSheet: StyleSheet;

Maintenant, nous ajoutons les méthodes de chargement des actifs.

 fonction privée onFontsLoadComplete (): void trace (fonts.length + "les polices ont été chargées"); loadCSS ();  fonction privée loadCSS (): void var loader: URLLoader = new URLLoader (); loader.addEventListener (Event.COMPLETE, onCSSLoadComplete); loader.load (new URLRequest ("css / styles.css"));  fonction privée onCSSLoadComplete (event: Event): void textStyleSheet = new StyleSheet (); textStyleSheet.parseCSS (event.target.data); loadXML ();  fonction privée loadXML (): void var loader: URLLoader = new URLLoader (); loader.addEventListener (Event.COMPLETE, onXMLLoadComplete); loader.load (new URLRequest ("xml / content.xml"));  fonction privée onXMLLoadComplete (événement: événement): void trace (XML (événement.target.data) .toXMLString ()); 

Exécutez Publier Aperçu et vous verrez le XML imprimé dans le journal de sortie.


Étape 10: Créer une classe HTMLTextBlock

L'affichage de texte au format HTML est quelque chose que vous pouvez souvent faire, alors créons une classe que nous pourrons utiliser encore et encore. Ouvrez un nouveau fichier ActionScript et enregistrez-le sous le nom "HTMLTextBlock.as" dans le répertoire. la source annuaire.

 package import flash.display.Sprite; import flash.text.StyleSheet; import flash.text.AntiAliasType; import flash.text.TextField; import flash.text.TextFieldAutoSize; Classe publique HTMLTextBlock étend Sprite // Largeur de htmlTextField. La valeur par défaut est 550 pixels. public var blockWidth: int = 550; // StyleSheet pour le htmlTextField. public var textStyleSheet: StyleSheet = new StyleSheet (); // contient le texte au format HTML. private var htmlTextField: TextField = new TextField (); fonction publique HTMLTextBlock () htmlTextField.embedFonts = true; htmlTextField.wordWrap = true; htmlTextField.multiline = true; htmlTextField.condenseWhite = true; htmlTextField.antiAliasType = AntiAliasType.ADVANCED; addChild (htmlTextField);  fonction publique setHTML (htmlText: String): void htmlTextField.autoSize = TextFieldAutoSize.LEFT; htmlTextField.width = blockWidth; htmlTextField.styleSheet = textStyleSheet; htmlTextField.htmlText = htmlText; 

Comme vous pouvez le constater, notre classe a trois variables. La variable privée htmlTextField contiendra du texte au format HTML. La variable publique blockWidth contrôle la largeur de htmlTextField, et textStyleSheet contient le style CSS qui est appliqué à htmlTextField. Dans le constructeur, nous définissons des propriétés pour htmlTextField et l'ajouter à la liste d'affichage. Enfin, nous créons setHTML () pour mettre du texte au format HTML dans htmlTextField.


Étape 11: Utilisez HTMLTextBlock dans notre document principal

Maintenant que nous avons une classe personnalisée pour afficher du texte HTML, utilisons-la. Commencez par modifier onXMLLoadComplete () d'envoyer des données XML sous forme de chaîne à une nouvelle méthode qui utilisera HTMLTextBlock pour afficher le HTML.

 fonction privée onXMLLoadComplete (event: Event): void // extrait le xml des données cible de l'événement var xml: XML = XML (event.target.data); // convertit le xml en chaîne var xmlString: String = xml; // envoie une chaîne xml à la méthode displayHTML displayHTML (xmlString);  fonction privée displayHTML (htmlText: String): void var htmlTextBlock: HTMLTextBlock = new HTMLTextBlock (); // définit la largeur et le style htmlTextBlock.blockWidth = 420; htmlTextBlock.textStyleSheet = textStyleSheet; // envoie la chaîne html à la classe HTMLTextBlock htmlTextBlock.setHTML (htmlText); // définit la position et ajoute à l'étape htmlTextBlock.x = 20; htmlTextBlock.y = 10; addChild (htmlTextBlock); 

Le résultat:


Étape 12: Ajouter une image en ligne

Ensuite, nous allons ajouter une image à notre bloc de texte. Vous pouvez utiliser l’image dans les fichiers sources de ce tutoriel ou créer votre propre.

Ouvrir content.xml, et au début du paragraphe, utilisez un code HTML de base balise pour intégrer l'image. Votre code XML devrait maintenant ressembler à ceci:

   TextField formaté au format HTML redimensionnable avec incorporation de polices d'exécution et style CSS 

Voici un exemple de champ de texte contenant une image en ligne. Le texte a été chargé à partir d'un fichier XML et est stylé avec une feuille de style css externe. La famille de polices Droid Serif, référencée par le css, a été chargée à l'exécution. Les styles disponibles pour Droid Serif sont audacieux, italique et gras italique. Droid Serif a été créé par Steve Matteson. La police de titre Lobster a été créée par Pablo Impallari

]]>

Maintenant, le SWF va regarder ceci:

L'alignement de l'image et du texte ne semble pas encore tout à fait correct. Nous allons améliorer cela dans les étapes à venir.


Étape 13: Attribuez un identifiant à l'image

Dans le didacticiel, nous allons écrire des méthodes qui ciblent l'image en ligne. Pour ce faire, nous devons ajouter un identifiant attribuer à notre balise d’image incorporée pouvant être référencée dans ActionScript. Ouvrir content.xml et mettre à jour le tag comme suit:

 ]]>

Étape 14: Détectez le redimensionnement de TextField

Afin d’ajuster l’alignement de l’image, nous devons changer sa X et y valeurs. Cependant, nous devons le faire une fois l’image ajoutée et le texte refondu. Pour ce faire, nous allons ajouter un écouteur d'événement au HTMLTextBlock classe.

D'abord, importez quelques classes supplémentaires:

 import flash.display.DisplayObject; import flash.display.Loader; import flash.events.Event;

Ensuite, mettez à jour le setHTML () méthode et créer un gestionnaire d'événements pour quand htmlTextField est redimensionné.

 fonction publique setHTML (htmlText: String): void htmlTextField.autoSize = TextFieldAutoSize.LEFT; htmlTextField.width = blockWidth; htmlTextField.styleSheet = textStyleSheet; htmlTextField.htmlText = htmlText; var loader: Loader = htmlTextField.getImageReference ("image") en tant que Loader; if (loader) // ajoute un écouteur d'événements pour le redimensionnement de htmlTextField en ajoutant l'image htmlTextField.addEventListener (Event.CHANGE, onImageAdded);  // sinon, il n'y a pas de référence d'image, donc ne faites rien function privée onImageAdded (event: Event): void // accéder à l'image à partir de la référence d'image dans le champ de texte var loader: Loader = htmlTextField.getImageReference ("image") en tant que chargeur; image var: DisplayObject = loader.content; 

Étape 15: Ajustez l'alignement de l'image

Remarquez comment l'image ne s'aligne pas correctement avec le texte? En effet, Flash ajoute automatiquement les espacements horizontal et vertical autour de l'image. Nous pouvons ajuster la quantité d'espacement en réglant la hspace et vspace attributs dans le étiquette.

 ]]>

En regardant le fichier SWF, l'image est maintenant bien alignée dans le paragraphe, mais le texte est trop proche de l'image..

On dirait que nous avons besoin d'espacement après tout. Mettez à jour les attributs de balise d'image pour hspace = "5" vspace = "2". Cela nous donne un meilleur espacement, mais encore une fois, l'image ne sera pas alignée sur le bord gauche du paragraphe. Nous pouvons résoudre ce problème en modifiant le X valeur de l'image en onImageAdded ().

 fonction privée onImageAdded (event: Event): void // accéder à l'image à partir de la référence d'image dans le champ de texte var loader: Loader = htmlTextField.getImageReference ("image") en tant que Loader; image var: DisplayObject = loader.content; // ajuste la position x de l'image pour décaler hspace image.x - = 5; 

Étape 16: Ajustez l'espacement des paragraphes

L'image est bien alignée, mais le paragraphe semble un peu trop proche du titre. Si nous travaillions sur une page HTML, nous pourrions ajuster le remplissage ou la marge de la page. p ou h1 balises, mais malheureusement, Flash ne prend en charge aucun style CSS pour l’alignement vertical entre les paragraphes. La meilleure solution que nous ayons est de créer un nouveau style CSS uniquement pour l’espacement des lignes. S'ouvrir styles.css et ajoutez le style suivant:

 br6 taille de la police: 6; 

Mettre à jour content.xml avec un vide br6 balise de style.

 ]]>

Et maintenant, l'espacement des lignes entre le titre et l'alignement des paragraphes a été subtilement amélioré.


Étape 17: Empêcher le bug de défilement

Ouvrez le fichier SWF, puis cliquez et faites glisser vers le bas tout en sélectionnant le texte. Vous remarquerez peut-être quelque chose d'inhabituel. La ligne supérieure de notre titre a disparu. Si vous le faites glisser vers le haut, il réapparaîtra. Sur les machines Windows, vous pouvez constater le même effet si vous survolez le texte et faites défiler la molette de la souris dans un navigateur..

Pour résoudre ce problème, grâce au blog Destroy Today, vous devez désactiver la réduction de la taille automatique une fois que le texte à l'intérieur a été modifié. Tout d'abord, mettez à jour le setHTML () méthode, puis onImageAdded ().

 fonction publique setHTML (htmlText: String): void htmlTextField.autoSize = TextFieldAutoSize.LEFT; htmlTextField.width = blockWidth; htmlTextField.styleSheet = textStyleSheet; htmlTextField.htmlText = htmlText; var loader: Loader = htmlTextField.getImageReference ("image") en tant que Loader; if (loader) // ajoute un écouteur d'événements pour le redimensionnement de htmlTextField en ajoutant l'image htmlTextField.addEventListener (Event.CHANGE, onImageAdded);  else // il n'y a pas de référence d'image, alors désactivez la taille automatique htmlTextField.autoSize = TextFieldAutoSize.NONE;  fonction privée onImageAdded (event: Event): void // accéder à l'image à partir de la référence de l'image dans le champ de texte var loader: Loader = htmlTextField.getImageReference ("image") as Loader; image var: DisplayObject = loader.content; // ajuste la position x de l'image pour décaler hspace image.x - = 5; // désactive l'autosize htmlTextField.autoSize = TextFieldAutoSize.NONE; 

Republiez, et vous verrez que notre correction de bogue a créé un nouveau problème.

Maintenant, la hauteur du champ de texte n'est pas assez grande pour afficher tout le texte et les deux lignes du bas ne sont pas visibles. Nous allons résoudre ce problème dans notre prochaine étape.


Étape 18: Ajuster la hauteur de TextField

Pour que tout le texte soit visible, nous devons augmenter la hauteur de HTMLTextField. Si nous augmentons simplement la hauteur de 50 pixels après l’ajout de l’image, le problème est résolu.

 htmlTextField.height + = 50;

Cependant, cette solution ne semble pas appropriée. Et si nous utilisions une image de taille différente? Différentes polices ou styles? Le meilleur moyen de résoudre le problème consiste à ajuster la hauteur de manière dynamique, en fonction des valeurs utilisées par Flash pour déterminer la hauteur. La tactique évidente serait d'utiliser le hauteur du texte paramètre. Essayons.

 htmlTextField.height = htmlTextField.textHeight;

C'est mieux, mais la ligne de fond du texte est toujours masquée. En effectuant des recherches (par exemple, cet article de blog), nous pouvons constater que deux valeurs doivent être ajoutées à la hauteur. L'un est le plus élevé de premier plan valeur des styles de texte que nous utilisons. Dans ce cas, ce serait 4 (du p style). L'autre valeur est htmlTextField.maxScrollV. Si nous ajoutons le total de ces valeurs, plus un réglage de sécurité de 2 pixels, à la hauteur, HTMLTextField sera correctement dimensionné, quels que soient les polices, le style ou les images utilisés. Au lieu de faire cela dans onImageAdded (), créer une nouvelle fonction pour verrouiller la hauteur du bloc de texte.

 fonction privée onImageAdded (event: Event): void // accéder à l'image à partir de la référence d'image dans le champ de texte var loader: Loader = htmlTextField.getImageReference ("image") en tant que Loader; image var: DisplayObject = loader.content; // ajuste la position x de l'image pour décaler hspace image.x - = 5; // verrouille la hauteur du champ de texte pour empêcher le défilement d'un bug lockHeight ();  private function lockHeight (): void // désactive la taille automatique htmlTextField.autoSize = TextFieldAutoSize.NONE; htmlTextField.height = htmlTextField.textHeight; // obtient le réglage de la hauteur // d'abord, parcourez les styles StyleSheet pour obtenir la valeur de début la plus élevée var mostLeading: int = 0; pour chaque (var style: String dans textStyleSheet.styleNames) var lead: int = int (textStyleSheet.getStyle (style) .leading); si (plus élevé < leading) highestLeading = leading;  // now, get the value of the height adjustment var heightAdjust:int = htmlTextField.maxScrollV + highestLeading + 2; htmlTextField.height += heightAdjust; 

le setHTML () Cette méthode doit également être mise à jour. Lorsqu'aucune image en ligne n'est chargée dans le bloc de texte, la hauteur doit être verrouillée.

 fonction publique setHTML (htmlText: String): void htmlTextField.autoSize = TextFieldAutoSize.LEFT; htmlTextField.width = blockWidth; htmlTextField.styleSheet = textStyleSheet; htmlTextField.htmlText = htmlText; var loader: Loader = htmlTextField.getImageReference ("image") en tant que Loader; if (loader) // ajoute un écouteur d'événements pour le redimensionnement de htmlTextField en ajoutant l'image htmlTextField.addEventListener (Event.CHANGE, onImageAdded);  else // il n'y a pas de référence d'image, verrouille la hauteur du champ de texte lockHeight (); 

Avec ces derniers ajustements, tout le texte est maintenant visible et ne défilera pas.


Étape 19: Ajouter un lien TextEvent personnalisé

Notre dernière tâche dans ce didacticiel consistera à ajouter un lien de texte qui redimensionne le bloc de texte. Pour cela, il faut d’abord ajouter le lien vers le texte HTML dans le content.xml fichier.

   TextField formaté au format HTML redimensionnable avec incorporation de polices d'exécution et style CSS  

Voici un exemple de champ de texte contenant une image en ligne. Le texte a été chargé à partir d'un fichier XML et est stylé avec une feuille de style css externe. La famille de polices Droid Serif, référencée par le css, a été chargée à l'exécution. Les styles disponibles pour Droid Serif sont audacieux, italique et gras italique. Droid Serif a été créé par Steve Matteson. La police de titre, Lobster, a été créée par Pablo Impallari.

Nous pouvons ajouter des événements aux liens de texte. Par exemple, augmenter ou diminuer la largeur du champ de texte.

]]>

Étape 20: Ajouter un auditeur TextEvent

Dans notre HTMLTextBlock classe, ajoutez un écouteur d'événements pour détecter le clic sur un lien de texte. Tout d'abord, importez le TextEvent classe.

 import flash.events.TextEvent;

Dans le constructeur, ajoutez l'écouteur d'événement.

 htmlTextField.addEventListener (TextEvent.LINK, textLinkHandler);

Maintenant, créez la méthode du gestionnaire d'événements.

 fonction privée textLinkHandler (event: TextEvent): void trace (event.text); 

Exécutez l'aperçu de publication. En cliquant sur les liens d’événement texte, vous verrez soit augmentationWidth ou diminutionWidth dans le journal de sortie.


Étape 21: Ajouter une fonction pour modifier la largeur

Créer une nouvelle méthode qui changera la largeur de htmlTextField.

 fonction privée changeWidth (newWidth: int): void blockWidth = newWidth; // déverrouille la hauteur du champ de texte htmlTextField.autoSize = TextFieldAutoSize.LEFT; // change la largeur htmlTextField.width = blockWidth; // re-verrouille la hauteur lockHeight (); 

Étape 22: Mettre à jour le gestionnaire de lien de texte

Mettre à jour le gestionnaire de liens de texte à appeler changeWidth ().

 fonction privée textLinkHandler (event: TextEvent): void if (event.text == "augmenterWidth") changeWidth (blockWidth + 10); if (event.text == "diminutionWidth") changeWidth (blockWidth - 10); 

En cliquant sur les liens de texte augmenter / dimin