Pakket | flashx.textLayout.events |
Klasse | public class CompositionCompleteEvent |
Overerving | CompositionCompleteEvent Event Object |
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
De drie hoofdmethoden die deze gebeurtenis verzenden, zijn compose()
, updateToController()
en UpdateAllControllers()
. Deze drie methoden bevinden zich in de StandardFlowComposer-klasse.
Opmerking: als de gebeurtenis is verzonden door de methode updateAllControllers()
, roept u updateAllControllers()
niet opnieuw op in uw gebeurtenishandlerfunctie. Een dergelijke oproep zou recursief zijn omdat de methode updateAllControllers()
zowel de stappen voor compositie als weergave uitvoert. De methode UpdateAllControllers()
verzendt deze gebeurtenis nadat de compositie is voltooid maar voordat de weergave wordt uitgevoerd. Dezelfde redenering is van toepassing op de methode updateToController()
.
Verwante API-elementen
Eigenschap | Gedefinieerd door | ||
---|---|---|---|
bubbles : Boolean [alleen-lezen]
Geeft aan of een gebeurtenis een terugkoppelgebeurtenis is. | Event | ||
cancelable : Boolean [alleen-lezen]
Geeft aan of het gedrag dat aan deze gebeurtenis is gekoppeld, kan worden voorkomen. | Event | ||
compositionLength : int
Het aantal samengestelde tekens. | CompositionCompleteEvent | ||
compositionStart : int
De startlocatie van het tekstbereik dat door de samenstelling wordt gewijzigd, uitgedrukt als een index in de tekstflow. | CompositionCompleteEvent | ||
constructor : Object
Verwijzing naar het klasseobject of de constructorfunctie van een bepaalde objectinstantie. | Object | ||
currentTarget : Object [alleen-lezen]
Het object dat het gebeurtenisobject actief verwerkt met een gebeurtenislistener. | Event | ||
eventPhase : uint [alleen-lezen]
De huidige fase in de gebeurtenisstroom. | Event | ||
target : Object [alleen-lezen]
Doel van gebeurtenis. | Event | ||
textFlow : flashx.textLayout.elements:TextFlow
TextFlow waarvoor de compositie is voltooid. | CompositionCompleteEvent | ||
type : String [alleen-lezen]
Het type gebeurtenis. | Event |
Methode | Gedefinieerd door | ||
---|---|---|---|
CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0) Constructor
| CompositionCompleteEvent | ||
Dupliceert een instantie van een subklasse Event. | Event | ||
Een hulpprogrammafunctie voor de implementatie van de methode toString() in aangepaste ActionScript 3.0-Event-klassen. | Event | ||
Geeft aan of voor een object een opgegeven eigenschap is gedefinieerd. | Object | ||
Controleert of de methode preventDefault() is aangeroepen voor de gebeurtenis. | Event | ||
Geeft aan of een instantie van de klasse Object zich in de prototypeketen van het object bevindt dat als parameter is opgegeven. | Object | ||
Annuleert het standaardgedrag van een gebeurtenis wanneer dat gedrag kan worden geannuleerd. | Event | ||
Geeft aan of de opgegeven eigenschap bestaat en kan worden opgesomd. | Object | ||
Stelt de beschikbaarheid van een dynamische eigenschap voor lusbewerkingen in. | Object | ||
Voorkomt het verwerken van gebeurtenislisteners in het huidige knooppunt en volgende knooppunten in de gebeurtenisstroom. | Event | ||
Voorkomt het verwerken van gebeurtenislisteners in knooppunten die volgen op het huidige knooppunt in de gebeurtenisstroom. | Event | ||
Geeft de tekenreeksweergave van dit object weer, geformatteerd volgens de locatiespecifieke conventies. | Object | ||
Retourneert een tekenreeks die alle eigenschappen van het Event-object bevat. | Event | ||
Retourneert de primitieve waarde van het opgegeven object. | Object |
Constante | Gedefinieerd door | ||
---|---|---|---|
COMPOSITION_COMPLETE : String = "compositionComplete" [statisch]
Definieert de waarde van de eigenschap type van een compositionComplete-gebeurtenisobject
| CompositionCompleteEvent |
compositionLength | eigenschap |
compositionStart | eigenschap |
compositionStart:int
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
De startlocatie van het tekstbereik dat door de samenstelling wordt gewijzigd, uitgedrukt als een index in de tekstflow.
Implementatie
public function get compositionStart():int
public function set compositionStart(value:int):void
textFlow | eigenschap |
textFlow:flashx.textLayout.elements:TextFlow
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
TextFlow waarvoor de compositie is voltooid.
Implementatie
public function get textFlow():flashx.textLayout.elements:TextFlow
public function set textFlow(value:flashx.textLayout.elements:TextFlow):void
CompositionCompleteEvent | () | Constructor |
public function CompositionCompleteEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, textFlow:flashx.textLayout.elements:TextFlow = null, compositionStart:int = 0, compositionLength:int = 0)
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
Constructor
Parameterstype:String — gebeurtenistype - gebruik de statische eigenschap COMPOSITION_COMPLETE.
| |
bubbles:Boolean (default = false ) — Geeft aan of een gebeurtenis een terugkoppelgebeurtenis is. Deze gebeurtenis wordt niet teruggekoppeld.
| |
cancelable:Boolean (default = false ) — Geeft aan of het gedrag dat aan deze gebeurtenis is gekoppeld, kan worden voorkomen. Deze gebeurtenis kan niet worden geannuleerd.
| |
textFlow:flashx.textLayout.elements:TextFlow (default = null ) — De TextFlow die is samengesteld.
| |
compositionStart:int (default = 0 ) — begin van de compositie, betreft een index in de tekstflow
| |
compositionLength:int (default = 0 ) — De lengte van het aantal samengestelde tekens
|
COMPOSITION_COMPLETE | Constante |
public static const COMPOSITION_COMPLETE:String = "compositionComplete"
Taalversie: | ActionScript 3.0 |
Runtimeversies: | Flash Player 10, AIR 1.5 |
Definieert de waarde van de eigenschap type
van een compositionComplete
-gebeurtenisobject
In dit voorbeeld wordt weergegeven hoe u de CompositionCompleteEvent-klasse kunt gebruiken voor het markeren van een specifiek woord in een TextFlow. Deze techniek is een alternatief voor het instellen van de TextLayoutFormat.backgroundColor
-eigenschap, voordat de tekst is samengesteld.
De compositionCompleteHandler()
-methode wordt uitgevoerd nadat de updateAllControllers()
-methode de uitvoering initialiseert door de tekst samen te stellen, maar voordat updateAllControllers()
de uitvoering voltooit door de weergavelijst bij te werken. Hierdoor kan de gebeurtenishandlermethode de markering van het woord 'shall' tekenen, voordat de updateAllControllers()
de weergavelijst bijwerkt.
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); } } }
Wed Jun 13 2018, 11:42 AM Z