Paquete | flashx.textLayout.events |
Clase | public class CompositionCompleteEvent |
Herencia | CompositionCompleteEvent Event Object |
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
Los tres métodos principales que distribuye este evento son compose()
, updateToController()
y updateAllControllers()
. Los tres métodos se encuentran en la clase StandardFlowComposer.
Nota: si el evento se distribuye por el método updateAllControllers()
, no se debe volver a llamar a updateAllControllers()
en la función de controlador de eventos. Una llamada a sí sería recursiva porque el método updateAllControllers()
ejecuta tanto la composición como la visualización. updateAllControllers()
distribuye este evento tras finalizar la composición, pero antes de que la visualización se ejecute. El mismo argumento se aplica al método updateToController()
.
Elementos de API relacionados
Propiedad | Definido por | ||
---|---|---|---|
bubbles : Boolean [solo lectura]
Indica si un evento es un evento de propagación. | Event | ||
cancelable : Boolean [solo lectura]
Indica si se puede evitar el comportamiento asociado al evento. | Event | ||
compositionLength : int
El número de caracteres compuestos. | CompositionCompleteEvent | ||
compositionStart : int
La ubicación inicial del rango de texto afectado por la composición, expresado como un índice en el flujo de texto. | CompositionCompleteEvent | ||
constructor : Object
Una referencia a la clase de objeto o función constructora para una instancia de objeto determinada. | Object | ||
currentTarget : Object [solo lectura]
Objeto que procesa de forma activa el objeto de evento con un detector de eventos. | Event | ||
eventPhase : uint [solo lectura]
La fase actual en el flujo del evento. | Event | ||
target : Object [solo lectura]
El destino del evento. | Event | ||
textFlow : flashx.textLayout.elements:TextFlow
TextFlow con composición completada. | CompositionCompleteEvent | ||
type : String [solo lectura]
El tipo de evento. | Event |
Método | Definido por | ||
---|---|---|---|
CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0) Constructor
| CompositionCompleteEvent | ||
Duplica una instancia de la subclase Event. | Event | ||
Una función de utilidad para implementar el método toString() en las clases Event personalizadas de ActionScript 3.0. | Event | ||
Indica si un objeto tiene definida una propiedad especificada. | Object | ||
Comprueba si se ha llamado a preventDefault() en el evento. | Event | ||
Indica si hay una instancia de la clase Object en la cadena de prototipo del objeto especificado como parámetro. | Object | ||
Cancela el comportamiento predeterminado de un evento si es posible cancelarlo. | Event | ||
Indica si existe la propiedad especificada y si es enumerable. | Object | ||
Establece la disponibilidad de una propiedad dinámica para operaciones de bucle. | Object | ||
Impide el proceso de cualquier detector de eventos en el nodo actual y los nodos siguientes en el flujo del evento. | Event | ||
Impide el proceso de cualquier detector de eventos en nodos siguientes al nodo actual. | Event | ||
Devuelve la representación de cadena de este objeto, con formato según las convenciones específicas de configuración regional. | Object | ||
Devuelve una cadena que contiene todas las propiedades del objeto de evento. | Event | ||
Devuelve el valor simple del objeto especificado. | Object |
Constante | Definido por | ||
---|---|---|---|
COMPOSITION_COMPLETE : String = "compositionComplete" [estática]
Define el valor de la propiedad type para un objeto de evento compositionComplete
| CompositionCompleteEvent |
compositionLength | propiedad |
compositionStart | propiedad |
compositionStart:int
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
La ubicación inicial del rango de texto afectado por la composición, expresado como un índice en el flujo de texto.
Implementación
public function get compositionStart():int
public function set compositionStart(value:int):void
textFlow | propiedad |
textFlow:flashx.textLayout.elements:TextFlow
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
TextFlow con composición completada.
Implementación
public function get textFlow():flashx.textLayout.elements:TextFlow
public function set textFlow(value:flashx.textLayout.elements:TextFlow):void
CompositionCompleteEvent | () | Información sobre |
public function CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0)
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
Constructor
Parámetrostype:String — tipo de evento_ utilice la propiedad estática COMPOSITION_COMPLETE.
| |
bubbles:Boolean (default = false ) — Indica si un evento es un evento de propagación. Este evento no es de propagación.
| |
cancelable:Boolean (default = false ) — Indica si se puede evitar el comportamiento asociado al evento. Este evento no se puede cancelar.
| |
textFlow:flashx.textLayout.elements:TextFlow (default = null ) — TextFlow compuesto
| |
compositionStart:int (default = 0 ) — inicio de la composición, en términos de un índice en el flujo de texto.
| |
compositionLength:int (default = 0 ) — número de longitud de caracteres compuestos
|
COMPOSITION_COMPLETE | Constante |
public static const COMPOSITION_COMPLETE:String = "compositionComplete"
Versión del lenguaje: | ActionScript 3.0 |
Versiones de motor de ejecución: | Flash Player 10, AIR 1.5 |
Define el valor de la propiedad type
para un objeto de evento compositionComplete
Este ejemplo muestra cómo utilizar la clase CompositionCompleteEvent para resaltar una palabra específica en un objeto TextFlow. Esta técnica representa una alternativa a establecer la propiedad TextLayoutFormat.backgroundColor
antes de componer el texto.
El método compositionCompleteHandler()
se ejecuta después de que el método updateAllControllers()
inicie su ejecución mediante la composición del texto, pero antes de que updateAllControllers()
finalice su ejecución actualizando la lista de visualización. Esto permite que el método del controlador de eventos dibuje el resaltado de la palabra "shall" antes de que updateAllControllers()
actualice la lista de visualización.
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, 02:12 PM Z