Pakiet | flashx.textLayout.events |
Klasa | public class CompositionCompleteEvent |
Dziedziczenie | CompositionCompleteEvent Event Object |
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Trzy główne metody wywołujące to zdarzenie to: compose()
, updateToController()
i updateAllControllers()
. Wszystkie te metody należą do klasy StandardFlowComposer.
Uwaga: Jeśli to zdarzenie zostało wywołane przez metodę updateAllControllers()
, nie należy ponownie wywoływać metody updateAllControllers()
w funkcji obsługi zdarzenia. Takie wywołanie miałoby charakter rekurencyjny, ponieważ metoda updateAllControllers()
realizuje zarówno krok układania, jak i krok wyświetlania. Metoda updateAllControllers()
wywołuje to zdarzenie po zakończeniu kompozycji, ale przed wykonaniem kroku wyświetlania. Te same zasady odnoszą się do metody updateToController()
.
Powiązane elementy interfejsu API
Właściwość | Zdefiniowane przez | ||
---|---|---|---|
bubbles : Boolean [tylko do odczytu]
Określa, czy zdarzenie może przechodzić fazę propagacji. | Event | ||
cancelable : Boolean [tylko do odczytu]
Wskazuje, czy można uniemożliwić operacje skojarzone ze zdarzeniem. | Event | ||
compositionLength : int
Liczba zawartych znaków. | CompositionCompleteEvent | ||
compositionStart : int
Początek zakresu tekstu, na który wpływa określanie układu — wyrażone jako indeks do przepływu tekstu. | CompositionCompleteEvent | ||
constructor : Object
Odwołanie do obiektu klasy lub funkcji konstruktora, dotyczące danej instancji obiektu. | Object | ||
currentTarget : Object [tylko do odczytu]
Obiekt przetwarzający aktywnie obiekt Event za pomocą detektora zdarzeń. | Event | ||
eventPhase : uint [tylko do odczytu]
Bieżąca faza przepływu zdarzeń. | Event | ||
target : Object [tylko do odczytu]
Miejsce docelowe zdarzenia. | Event | ||
textFlow : flashx.textLayout.elements:TextFlow
Obiekt TextFlow, którego określanie układu zakończono. | CompositionCompleteEvent | ||
type : String [tylko do odczytu]
Typ zdarzenia. | Event |
Metoda | Zdefiniowane przez | ||
---|---|---|---|
CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0) Konstruktor
| CompositionCompleteEvent | ||
Powiela instancję podklasy Event. | Event | ||
Funkcja narzędziowa umożliwiająca implementację metody toString() w niestandardowych klasach Event w języku ActionScript 3.0. | Event | ||
Wskazuje, czy dla obiektu zdefiniowano określoną właściwość. | Object | ||
Sprawdza, czy w odniesieniu do tego zdarzenia wywołano metodę preventDefault(). | Event | ||
Wskazuje, czy instancja klasy Object należy do łańcucha prototypów obiektu określonego jako parametr. | Object | ||
Anuluje domyślne ustawienia zdarzenia, o ile zachowanie to może być anulowane. | Event | ||
Wskazuje, czy określona właściwość istnieje i jest przeliczalna. | Object | ||
Ustawia dostępność właściwości dynamicznej używanej w pętlach. | Object | ||
Zapobiega przetwarzaniu wszelkich detektorów zdarzeń w węźle bieżącym i węzłach następujących po nim. | Event | ||
Zapobiega przetwarzaniu wszelkich detektorów zdarzeń w węzłach następujących po węźle bieżącym w przepływie zdarzeń. | Event | ||
Zwraca ciąg reprezentujący obiekt — sformatowany zgodnie z konwencjami właściwymi dla ustawień regionalnych. | Object | ||
Zwraca ciąg znaków, który zawiera wszystkie właściwości obiektu Event. | Event | ||
Zwraca pierwotną wartość dla określonego obiektu. | Object |
Stała | Zdefiniowane przez | ||
---|---|---|---|
COMPOSITION_COMPLETE : String = "compositionComplete" [statyczny]
Definiuje wartość właściwości type obiektu zdarzenia compositionComplete
| CompositionCompleteEvent |
compositionLength | właściwość |
compositionStart | właściwość |
compositionStart:int
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Początek zakresu tekstu, na który wpływa określanie układu — wyrażony jako indeks do przepływu tekstu.
Implementacja
public function get compositionStart():int
public function set compositionStart(value:int):void
textFlow | właściwość |
textFlow:flashx.textLayout.elements:TextFlow
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Obiekt TextFlow, którego określanie układu zakończono.
Implementacja
public function get textFlow():flashx.textLayout.elements:TextFlow
public function set textFlow(value:flashx.textLayout.elements:TextFlow):void
CompositionCompleteEvent | () | Konstruktor |
public function CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0)
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Konstruktor
Parametrytype:String — typ zdarzenia - należy użyć statycznej właściwości COMPOSITION_COMPLETE.
| |
bubbles:Boolean (default = false ) — Określa, czy zdarzenie może przechodzić fazę propagacji. To zdarzenie nie propaguje.
| |
cancelable:Boolean (default = false ) — Wskazuje, czy można uniemożliwić operacje skojarzone ze zdarzeniem. Tego zdarzenia nie można anulować.
| |
textFlow:flashx.textLayout.elements:TextFlow (default = null ) — Ułożony obiekt TextFlow.
| |
compositionStart:int (default = 0 ) — rozpoczęcie określania układu — indeks do przepływu tekstu.
| |
compositionLength:int (default = 0 ) — liczba zawartych znaków
|
COMPOSITION_COMPLETE | Stała |
public static const COMPOSITION_COMPLETE:String = "compositionComplete"
Wersja języka: | ActionScript 3.0 |
Wersje środowiska wykonawczego: | Flash Player 10, AIR 1.5 |
Definiuje wartość właściwości type
obiektu zdarzenia compositionComplete
Ten przykład ilustruje sposób korzystania z klasy CompositionCompleteEvent w celu wyróżnienia konkretnego słowa w obiekcie TextFlow. Ta technika stanowi alternatywę dla ustawienia właściwości TextLayoutFormat.backgroundColor
przed ułożeniem tekstu.
Metoda compositionCompleteHandler()
jest wykonywana po zainicjowaniu wykonania metody updateAllControllers()
poprzez złożenie tekstu, ale zanim metoda updateAllControllers()
zakończy wykonanie przez aktualizację listy wyświetlania. Umożliwia to metodzie detektora zdarzeń narysowanie podświetlenia słowa "shall" przed uaktualnieniem listy wyświetlania za pomocą metody 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, 12:06 PM Z