Package | flashx.textLayout.events |
Classe | public class CompositionCompleteEvent |
Héritage | CompositionCompleteEvent Event Object |
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Les trois principales méthodes qui distribuent cet événement sont composer()
, updateToController()
et updateAllControllers()
. Ces trois méthodes font partie de la classe StandardFlowComposer.
Remarque : si l’événement est distribué par la méthode updateAllControllers()
, n’appelez pas updateAllControllers()
à nouveau dans votre fonction de gestionnaire d’événement. Un tel appel est récursif, car la méthode updateAllControllers()
exécute la composition et les étapes d’affichage. La méthode updateAllControllers()
distribue cet événement à l’issue de la composition, mais avant l’exécution de l’étape d’affichage. Le même raisonnement s’applique à la méthode updateToController()
.
Eléments de l’API associés
Propriété | Défini par | ||
---|---|---|---|
bubbles : Boolean [lecture seule]
Indique si un événement peut se propager vers le haut (bubbling). | Event | ||
cancelable : Boolean [lecture seule]
Indique si le comportement associé à l’événement peut être évité. | Event | ||
compositionLength : int
Nombre des caractères composés. | CompositionCompleteEvent | ||
compositionStart : int
Position de début de la plage de texte affectée par la composition, exprimée en tant qu’index dans le flux de texte. | CompositionCompleteEvent | ||
constructor : Object
Référence à l’objet de classe ou à la fonction constructeur d’une occurrence donnée d’un objet. | Object | ||
currentTarget : Object [lecture seule]
L’objet qui traite activement l’objet Event avec un écouteur d’événements. | Event | ||
eventPhase : uint [lecture seule]
Phase actuelle du flux d’événements. | Event | ||
target : Object [lecture seule]
Cible de l’événement. | Event | ||
textFlow : flashx.textLayout.elements:TextFlow
L’objet TextFlow sur lequel composition est terminée. | CompositionCompleteEvent | ||
type : String [lecture seule]
Type d’événement. | Event |
Méthode | Défini par | ||
---|---|---|---|
CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0) Constructeur
| CompositionCompleteEvent | ||
Duplique une occurrence d’une sous-classe Event. | Event | ||
Fonction d’un utilitaire permettant d’implémenter la méthode toString() dans des classes Event ActionScript 3.0 personnalisées. | Event | ||
Indique si la propriété spécifiée d’un objet est définie. | Object | ||
Vérifie si la méthode preventDefault() a été appelée pour l’événement. | Event | ||
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l’objet spécifié en tant que paramètre. | Object | ||
Annule le comportement par défaut d’un événement si cette opération est possible. | Event | ||
Indique si la propriété spécifiée existe et est énumérable. | Object | ||
Définit la disponibilité d’une propriété dynamique pour les opérations en boucle. | Object | ||
Bloque le traitement des écouteurs d’événement dans le nœud actuel et les suivants dans le flux d’événements. | Event | ||
Bloque le traitement des écouteurs d’événement dans les nœuds qui suivent le nœud actuel dans le flux d’événements. | Event | ||
Renvoie la représentation de chaîne de cet objet, formatée selon les paramètres régionaux en vigueur. | Object | ||
Renvoie une chaîne répertoriant toutes les propriétés de l’objet Event. | Event | ||
Renvoie la valeur primitive de l’objet spécifié. | Object |
Constante | Défini par | ||
---|---|---|---|
COMPOSITION_COMPLETE : String = "compositionComplete" [statique]
Définit la valeur de la propriété type d’un objet d’événement compositionComplete
| CompositionCompleteEvent |
compositionLength | propriété |
compositionStart | propriété |
compositionStart:int
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Position de début de la plage de texte affectée par la composition, exprimée en tant qu’index dans le flux de texte.
Implémentation
public function get compositionStart():int
public function set compositionStart(value:int):void
textFlow | propriété |
textFlow:flashx.textLayout.elements:TextFlow
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
L’objet TextFlow sur lequel composition est terminée.
Implémentation
public function get textFlow():flashx.textLayout.elements:TextFlow
public function set textFlow(value:flashx.textLayout.elements:TextFlow):void
CompositionCompleteEvent | () | Constructeur |
public function CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0)
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Constructeur
Paramètrestype:String — Type d’événement - Utilisez la propriété statique COMPOSITION_COMPLETE.
| |
bubbles:Boolean (default = false ) — Indique si un événement peut se propager vers le haut (bubbling). Cet événement ne se propage pas vers le haut.
| |
cancelable:Boolean (default = false ) — Indique si le comportement associé à l’événement peut être évité. Cet événement ne peut pas être annulé.
| |
textFlow:flashx.textLayout.elements:TextFlow (default = null ) — L’objet TextFlow qui est composé
| |
compositionStart:int (default = 0 ) — Début de la composition, en termes d’index dans l’enchaînement de texte.
| |
compositionLength:int (default = 0 ) — Nombre des caractères composés
|
COMPOSITION_COMPLETE | Constante |
public static const COMPOSITION_COMPLETE:String = "compositionComplete"
Version du langage: | ActionScript 3.0 |
Versions du moteur d’exécution: | Flash Player 10, AIR 1.5 |
Définit la valeur de la propriété type
d’un objet d’événement compositionComplete
Cet exemple indique comment utiliser la classe CompositionCompleteEvent pour mettre en surbrillance un mot particulier dans un objet TextFlow. Cette technique représente une alternative à la définition de la propriété TextLayoutFormat.backgroundColor
avant la composition du texte.
La méthode compositionCompleteHandler()
s’exécute après l’exécution de la méthode updateAllControllers()
par la composition du texte, mais avant la fin de l’exécution de updateAllControllers()
par la mise à jour de la liste d’affichage. Cela permet à la méthode du gestionnaire d’événements de tracer la mise en évidence du « shall » avant la mise à jour de la liste d’affichage par updateAllControllers()
.
package flashx.textLayout.events.examples { import flash.display.Graphics; import flash.display.Sprite; import flash.geom.Rectangle; import flash.text.engine.TextLine; import flashx.textLayout.compose.StandardFlowComposer; import flashx.textLayout.compose.TextFlowLine; import flashx.textLayout.container.ContainerController; import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.elements.FlowLeafElement; import flashx.textLayout.elements.ParagraphElement; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.events.CompositionCompleteEvent; public class CompositionCompleteEvent_example extends Sprite { private var wordToHighlight:String = "shall"; private var poemContainer:Sprite; private var txtFlow:TextFlow; private var controller:ContainerController; private const poem:String = "Sonnet 18\n" + "Shall I compare thee to a summer's day?\n" + "Thou art more lovely and more temperate:\n" + "Rough winds do shake the darling buds of May,\n" + "And summer's lease hath all too short a date:\n" + "Sometime too hot the eye of heaven shines,\n" + "And often is his gold complexion dimmed,\n" + "And every fair from fair sometime declines,\n" + "By chance, or nature's changing course untrimmed:\n" + "But thy eternal summer shall not fade,\n" + "Nor lose possession of that fair thou ow'st,\n" + "Nor shall death brag thou wand'rest in his shade,\n" + "When in eternal lines to time thou grow'st,\n" + "So long as men can breathe or eyes can see,\n" + "So long lives this, and this gives life to thee.\n" + "William Shakespeare\n"; public function CompositionCompleteEvent_example() { poemContainer = new Sprite(); txtFlow = new TextFlow(); poemContainer.x = 30; poemContainer.y = 30; this.stage.addChild( poemContainer ); controller = new ContainerController(poemContainer, 300, 230); controller.verticalScrollPolicy = flashx.textLayout.container.ScrollPolicy.OFF; txtFlow = TextConverter.importToFlow( poem, TextConverter.PLAIN_TEXT_FORMAT ); txtFlow.flowComposer = new StandardFlowComposer(); txtFlow.addEventListener(CompositionCompleteEvent.COMPOSITION_COMPLETE, compositionCompleteHandler); txtFlow.flowComposer.addController( controller ); txtFlow.flowComposer.updateAllControllers(); } private function compositionCompleteHandler(event:CompositionCompleteEvent):void { if (event.textFlow == txtFlow) { checkForMatchingWord(); } } private function checkForMatchingWord():void { var currentLeaf:FlowLeafElement = txtFlow.getFirstLeaf(); var currentParagraph:ParagraphElement = currentLeaf ? currentLeaf.getParagraph() : null; while (currentParagraph) { // iterate over all paragraphs in the text flow var paraStart:uint = currentParagraph.getAbsoluteStart(); var currWordBoundary:int = 0; var nextWordBoundary:int = 0; var pattern:RegExp = new RegExp(wordToHighlight, "i"); while (true) { // iterate over letters in a word nextWordBoundary = currentParagraph.findNextWordBoundary(currWordBoundary); if (nextWordBoundary == currWordBoundary) { break; // end of paragraph; break of inner while loop } var word:String = ''; var indexInLeaf:int = currWordBoundary + paraStart - currentLeaf.getAbsoluteStart(); var wordLen:uint = nextWordBoundary - currWordBoundary; while (true){ // traverse consecutive leaf elements looking for 'wordLen' characters // Take as many characters from the current leaf as possible to meet the quota of 'wordLen' var consumeCount:uint = indexInLeaf + wordLen <= currentLeaf.textLength ? wordLen : currentLeaf.textLength - indexInLeaf; word += currentLeaf.text.substr (indexInLeaf, consumeCount); wordLen -= consumeCount; if (!wordLen) break; // Quota not met; move to the next leaf // Also reset the index where the next leaf will be scanned currentLeaf = currentLeaf.getNextLeaf(); indexInLeaf = 0; } if (pattern.test(word)) { highlightWord(currWordBoundary, nextWordBoundary, word, paraStart); } currWordBoundary = nextWordBoundary; } // At this point, currentLeaf is the last leaf in currentParagraph. Move to the next paragraph. currentLeaf = currentLeaf.getNextLeaf(); currentParagraph = currentLeaf ? currentLeaf.getParagraph() : null; } } private function highlightWord(begin:int, end:int, word:String, paraStart:int):void { var absoluteBegin:int = paraStart + begin; var absoluteEnd:int = paraStart + end; var startTextFlowLineIndex:int = txtFlow.flowComposer.findLineIndexAtPosition(absoluteBegin); var endTextFlowLineIndex:int = txtFlow.flowComposer.findLineIndexAtPosition(absoluteEnd); var txtFlowLine:TextFlowLine = txtFlow.flowComposer.getLineAt(startTextFlowLineIndex); var txtLine:TextLine = txtFlowLine.getTextLine(); // get the bounds of the first and last Atom of the textLine var startbounds:Rectangle = txtLine.getAtomBounds(txtLine.getAtomIndexAtCharIndex(begin)); var endbounds:Rectangle = txtLine.getAtomBounds(txtLine.getAtomIndexAtCharIndex(end)); var box:Sprite = new Sprite(); var g:Graphics = box.graphics; g.lineStyle(1, 0xFFFF00, 0.5); // set line style g.beginFill(0xFFFF00, 0.3); // set fill style // draw a rectangle around the specified boundaries g.drawRect(startbounds.left, startbounds.top, (endbounds.x - startbounds.x), startbounds.height); txtLine.addChild(box); } } }
Tue Jun 12 2018, 09:30 AM Z