Pacchetto | flashx.textLayout.events |
Classe | public class CompositionCompleteEvent |
Ereditarietà | CompositionCompleteEvent Event Object |
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
I tre metodi principali che inviano questo evento sono compose()
, updateToController()
e updateAllControllers()
. Questi tre metodi fanno tutti parte della classe StandardFlowComposer.
Nota: se l'evento viene inviato dal metodo updateAllControllers()
, evitate di chiamare di nuovo updateAllControllers()
nella funzione del gestore di eventi. Tale chiamata sarebbe ricorsiva perché il metodo updateAllControllers()
esegue sia il passaggio di composizione che quello di visualizzazione. Il metodo updateAllControllers()
invia questo evento dopo il completamento della composizione, ma prima che venga eseguito il passaggio di visualizzazione. Lo stesso concetto si applica al metodo updateToController()
.
Elementi API correlati
Proprietà | Definito da | ||
---|---|---|---|
bubbles : Boolean [sola lettura]
Indica se un evento è un evento di bubbling. | Event | ||
cancelable : Boolean [sola lettura]
Indica se il comportamento associato all'evento può essere impedito. | Event | ||
compositionLength : int
Il numero di caratteri composti. | CompositionCompleteEvent | ||
compositionStart : int
La posizione iniziale dell'intervallo di testo interessato dalla composizione, espresso sotto forma di indice nel flusso di testo. | CompositionCompleteEvent | ||
constructor : Object
Un riferimento all'oggetto classe o alla funzione di costruzione per una determinata istanza di oggetto. | Object | ||
currentTarget : Object [sola lettura]
L'oggetto che elabora attivamente l'oggetto Event con un listener di eventi. | Event | ||
eventPhase : uint [sola lettura]
La fase attuale del flusso di eventi. | Event | ||
target : Object [sola lettura]
Il target dell'evento. | Event | ||
textFlow : flashx.textLayout.elements:TextFlow
L'oggetto TextFlow sul quale è stata completata la composizione. | CompositionCompleteEvent | ||
type : String [sola lettura]
Il tipo di evento. | Event |
Metodo | Definito da | ||
---|---|---|---|
CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0) Funzione di costruzione
| CompositionCompleteEvent | ||
Duplica un'istanza di una sottoclasse Event. | Event | ||
Una funzione dell'utilità per l'implementazione del metodo toString() in classi Event ActionScript 3.0 personalizzate. | Event | ||
Indica se per un oggetto è definita una proprietà specifica. | Object | ||
Verifica se sull'evento è stato chiamato il metodo preventDefault(). | Event | ||
Indica se un'istanza della classe Object si trova nella catena di prototipi dell'oggetto specificato come parametro. | Object | ||
Annulla il comportamento predefinito di un evento se tale comportamento può essere annullato. | Event | ||
Indica se la proprietà specificata esiste ed è enumerabile. | Object | ||
Imposta la disponibilità di una proprietà dinamica per le operazioni cicliche. | Object | ||
Impedisce l'elaborazione di tutti i listener di eventi nel nodo corrente e in tutti i nodi successivi del flusso di eventi. | Event | ||
Impedisce l'elaborazione di tutti i listener di eventi nei nodi del flusso di eventi successivi a quello corrente. | Event | ||
Restituisce la rappresentazione in formato stringa di questo oggetto, formattato in base alle convenzioni specifiche per le versioni localizzate. | Object | ||
Restituisce una stringa che contiene tutte le proprietà dell'oggetto Event. | Event | ||
Restituisce il valore di base dell'oggetto specificato. | Object |
Costante | Definito da | ||
---|---|---|---|
COMPOSITION_COMPLETE : String = "compositionComplete" [statico]
Definisce il valore della proprietà type di un oggetto evento compositionComplete.
| CompositionCompleteEvent |
compositionLength | proprietà |
compositionStart | proprietà |
compositionStart:int
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
La posizione iniziale dell'intervallo di testo interessato dalla composizione, espresso sotto forma di indice nel flusso di testo.
Implementazione
public function get compositionStart():int
public function set compositionStart(value:int):void
textFlow | proprietà |
textFlow:flashx.textLayout.elements:TextFlow
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
L'oggetto TextFlow sul quale è stata completata la composizione.
Implementazione
public function get textFlow():flashx.textLayout.elements:TextFlow
public function set textFlow(value:flashx.textLayout.elements:TextFlow):void
CompositionCompleteEvent | () | Funzione di costruzione |
public function CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0)
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Funzione di costruzione
Parametritype:String — tipo di evento - utilizzate la proprietà statica COMPOSITION_COMPLETE.
| |
bubbles:Boolean (default = false ) — Indica se un evento è un evento di bubbling. Questo evento non si propaga.
| |
cancelable:Boolean (default = false ) — Indica se il comportamento associato all'evento può essere impedito. Questo evento non può essere annullato.
| |
textFlow:flashx.textLayout.elements:TextFlow (default = null ) — L'oggetto TextFlow ottenuto dalla composizione.
| |
compositionStart:int (default = 0 ) — avvio della composizione, in termini di un indice all'interno del flusso di testo.
| |
compositionLength:int (default = 0 ) — numero di caratteri di lunghezza composti
|
COMPOSITION_COMPLETE | Costante |
public static const COMPOSITION_COMPLETE:String = "compositionComplete"
Versione linguaggio: | ActionScript 3.0 |
Versioni runtime: | Flash Player 10, AIR 1.5 |
Definisce il valore della proprietà type
di un oggetto evento compositionComplete
In questo esempio viene illustrato come utilizzare la classe CompositionCompleteEvent per evidenziare una parola specifica in un TextFlow. Questa tecnica costituisce un'alternativa all'impostazione della proprietà TextLayoutFormat.backgroundColor
prima della composizione del testo.
Il metodo compositionCompleteHandler()
viene eseguito dopo che viene avviata l'esecuzione del metodo updateAllControllers()
con la composizione del testo, ma prima che sia completata l'esecuzione di updateAllControllers()
con l'aggiornamento dell'elenco di visualizzazione. In questo modo il metodo del gestore di eventi può disegnare l'evidenziazione della parola "shall" prima che updateAllControllers()
aggiorni l'elenco di visualizzazione.
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:44 PM Z