套件 | flashx.textLayout.compose |
類別 | public class StandardFlowComposer |
繼承 | StandardFlowComposer FlowComposerBase Object |
實作 | IFlowComposer |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
每次呼叫 compose()
或 updateAllControllers()
時,第一步都會先將文字流排標準化。標準化程序會檢查已修改的 TextFlow 物件部分,並採取下列步驟:
- 刪除空白的 FlowLeafElement 與 SubParagraphGroupElement 物件。
- 合併特質相同的同級跨距。
- 如果流排空白,則新增空白段落。
若要使用 StandardFlowComposer,請將其指派給 TextFlow 物件的 flowComposer
屬性。呼叫 updateAllControllers()
方法,以配置與顯示附加至流排撰寫器容器中的文字。
注意:對於簡單的靜態的文字流排,您也可以使用文字行 factory 類別之一。使用這些 factory 類別建立文字行,通常比使用流排撰寫器更簡易,但不支援編輯、動態變更或使用者互動。
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
composing : Boolean [唯讀]
如果流排撰寫器目前正在執行撰寫作業則為 true。 | StandardFlowComposer | ||
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
damageAbsoluteStart : int [唯讀]
在需要撰寫和更新的文字流排中,緊接在第一個元素前面的絕對位置。 | FlowComposerBase | ||
numControllers : int [唯讀]
指定至此 IFlowComposer 實體的容器數目。 | StandardFlowComposer | ||
numLines : int [唯讀]
撰寫於流排中的總行數。 | FlowComposerBase | ||
rootElement : ContainerFormattedElement [唯讀]
與此 IFlowComposer 實體相關的根元素。 | StandardFlowComposer | ||
swfContext : ISWFContext
需要用於建立 FTE 呼叫的 ISWFContext 實體。 | FlowComposerBase | ||
textFlow : flashx.textLayout.elements:TextFlow [唯讀]
附加此流排撰寫器的 TextFlow 物件。 | FlowComposerBase |
方法 | 定義自 | ||
---|---|---|---|
建立 StandardFlowComposer 物件。 | StandardFlowComposer | ||
將控制器新增至此 IFlowComposer 實體。 | StandardFlowComposer | ||
將控制器新增至位於指定索引的這個 IFlowComposer 實體。 | StandardFlowComposer | ||
計算需要多少行才能在流排的根元素中顯示內容,以及這些行在流排的顯示容器中的位置。 | StandardFlowComposer | ||
撰寫根元素的內容包含到指定索引中的容器為止 (含此容器)。 | StandardFlowComposer | ||
撰寫根元素的內容到指定的位置為止。 | StandardFlowComposer | ||
將行標示為損壞,需要重新撰寫。 | FlowComposerBase | ||
傳回包含指定位置之內容的控制器索引。 | StandardFlowComposer | ||
findLineAtPosition(absolutePosition:int, preferPrevious:Boolean = false):flashx.textLayout.compose:TextFlowLine
傳回包含指定位置之內容的 TextFlowLine 物件。 | FlowComposerBase | ||
傳回包含指定位置之內容的 TextFlowLine 物件連續行編號。 | FlowComposerBase | ||
傳回指定之 ContainerController 物件中,第一個內容元素的絕對位置。 | StandardFlowComposer | ||
傳回位於指定索引的 ContainerController 物件。 | StandardFlowComposer | ||
傳回指定之 ContainerController 物件的索引。 | StandardFlowComposer | ||
傳回具有指定行編號的那一行。 | FlowComposerBase | ||
指出物件是否有已定義的指定屬性。 | Object | ||
一旦互動管理員有所變更時,就由 TextFlow 呼叫。 | StandardFlowComposer | ||
指示流排開頭與包含位於指定位置之內容的該行之間,是否有任何 TextFlowLine 物件標示為已損毀。 | FlowComposerBase | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
指出指定的屬性是否存在,以及是否可列舉。 | Object | ||
從這個 IFlowComposer 實體移除所有控制器。 | StandardFlowComposer | ||
從這個 IFlowComposer 實體移除控制器。 | StandardFlowComposer | ||
從這個 IFlowComposer 實體移除位於指定索引的控制器。 | StandardFlowComposer | ||
將焦點設為包含 absolutePosition 參數所指定位置的容器。 | StandardFlowComposer | ||
為迴圈作業設定動態屬性的可用性。 | Object | ||
StandardFlowComposer | |||
傳回代表此物件的字串,根據地區特定慣例進行格式化。 | Object | ||
會傳回指定之物件的字串形式。 | Object | ||
撰寫根元素的內容並更新顯示。 | StandardFlowComposer | ||
更新行長度以維持與 TextFlow 的對應。 | FlowComposerBase | ||
撰寫並更新顯示的範圍到指定索引中的容器為止 (含此容器)。 | StandardFlowComposer | ||
會傳回指定之物件的基本值。 | Object |
方法 | 定義自 | ||
---|---|---|---|
如果需要撰寫則傳回 true,否則傳回 false | StandardFlowComposer |
composing | 屬性 |
numControllers | 屬性 |
rootElement | 屬性 |
rootElement:ContainerFormattedElement
[唯讀] 語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
與此 IFlowComposer 實體相關的根元素。
只有一個 TextFlow 物件可以是根元素。
實作
public function get rootElement():ContainerFormattedElement
StandardFlowComposer | () | 建構函式 |
public function StandardFlowComposer()
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
建立 StandardFlowComposer 物件。
若要使用 StandardFlowComposer 物件,請將其指派給 TextFlow 物件的 flowComposer
屬性。呼叫 updateAllControllers()
方法,以配置與顯示附加至流排撰寫器容器中的文字。
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.compose.StandardFlowComposer; public class StandardFlowComposer_constructor { public function createComposer(textFlow:TextFlow):void { textFlow.flowComposer = new StandardFlowComposer(); } } }
addController | () | 方法 |
public function addController(controller:ContainerController):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
將控制器新增至此 IFlowComposer 實體。
容器會新增至容器清單的結尾。
參數
controller:ContainerController — 要新增的 ContainerController 物件。
|
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_addController { import flash.display.Sprite; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public function setupController(textFlow:TextFlow):void { var container:Sprite = new Sprite(); var controller:ContainerController = new ContainerController( container, 400, 200 ); textFlow.flowComposer.addController( controller ); } } }
addControllerAt | () | 方法 |
public function addControllerAt(controller:ContainerController, index:int):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
將控制器新增至位於指定索引的這個 IFlowComposer 實體。
控制器清單是從 0 開始 (第一個控制器的索引是 0)。
參數
controller:ContainerController — 要新增的 ContainerController 物件。
| |
index:int — 數值索引,指定控制器清單中要插入 ContainerController 物件的位置。
|
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_addControllerAt { import flash.display.Sprite; import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public function setupController(textFlow:TextFlow):void { var container:Sprite = new Sprite(); var controller:ContainerController = new ContainerController( container, 400, 200 ); textFlow.flowComposer.addControllerAt( controller, 0 ); } } }
compose | () | 方法 |
public function compose():Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
計算需要多少行才能在流排的根元素中顯示內容,以及這些行在流排的顯示容器中的位置。
compose()
方法只會撰寫自上次撰寫作業後曾變更過的內容。所有結果都會予以儲存,這樣後續呼叫 compose()
或 updateAllControllers()
時,只要流排內容未變更,就不會另行重新撰寫。
如果任一容器的內容已經變更,此方法會傳回 true
。
Boolean — 如果有任何變更則為 true。
|
相關 API 元素
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_compose { import flashx.textLayout.elements.TextFlow; public function compose(textFlow:TextFlow):void { textFlow.flowComposer.compose(); } } }
composeToController | () | 方法 |
public function composeToController(index:int):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
撰寫根元素的內容包含到指定索引中的容器為止 (含此容器)。
如果到指定之索引為止的任一容器 (含此容器) 內容已變更,此方法就會傳回 true
。如果 index
大於控制器數目 (或未指定),則撰寫所有容器。
參數
index:int (default = NaN ) — 撰寫範圍至少包含到 TextFlow 的這個容器為止。如果 controllerIndex 大於控制器的數目,請於最後容器的結尾撰寫。
|
Boolean — 如果有任何變更則為 true。
|
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_composeToController { import flashx.textLayout.elements.TextFlow; public function compose(textFlow:TextFlow):void { textFlow.flowComposer.composeToController( 3 ); } } }
composeToPosition | () | 方法 |
public function composeToPosition(absolutePosition:int):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
撰寫根元素的內容到指定的位置為止。
如果到指定之位置為止的任一容器 (含此容器) 內容已變更,此方法就會傳回 true
。如果 absolutePosition
大於 TextFlow 的長度 (或未指定),則撰寫整個流排。
參數
absolutePosition:int (default = NaN ) — 撰寫範圍至少包含到 TextFlow 的這個位置為止。根據預設或如果 absolutePosition 超過流排的結尾,請於流排的結尾撰寫。
|
Boolean — 如果有任何變更則為 true。
|
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { public class StandardFlowComposer_composeToPosition { import flashx.textLayout.elements.TextFlow; public function compose(textFlow:TextFlow):void { textFlow.flowComposer.composeToPosition( 344 ); } } }
findControllerIndexAtPosition | () | 方法 |
public function findControllerIndexAtPosition(absolutePosition:int, preferPrevious:Boolean = false):int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
傳回包含指定位置之內容的控制器索引。
您可以將位置想成是文字流排兩個字元或其他元素之間的標度。如果 absolutePosition
的值是介於某一容器的最後一個字元與下一個容器的第一個字元之間的位置,則當 preferPrevious
參數設為 true
時,會傳回前一個容器,而當 preferPrevious
參數設為 false
時,則會傳回後一個容器。
如果指定位置的內容不在任何容器中,或位於文字流排位置的範圍以外,此方法會傳回 -1。
參數
absolutePosition:int — 所搜尋之容器索引的內容所在位置。
| |
preferPrevious:Boolean (default = false ) — 指定當位置介於某一容器的最後一個元素與下一個容器的第一個元素之間時,所要傳回的容器索引。
|
int — 容器控制器的索引,或找不到時則為 -1。
|
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.compose.StandardFlowComposer; public class StandardFlowComposer_findControllerIndexAtPosition { public function findControllerIndexAtPosition(textFlow:TextFlow):void { var index:int = textFlow.flowComposer.findControllerIndexAtPosition( 344 ); } } }
getAbsoluteStart | () | 方法 |
public function getAbsoluteStart(controller:ContainerController):int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
傳回指定之 ContainerController 物件中,第一個內容元素的絕對位置。
位置是根據文字流排兩個字元或其他元素之間的標度計算而得。流排第一個元素前的位置為零。絕對位置是從流排開頭算起所得到的位置。
參數
controller:ContainerController — 與此流排撰寫器相關的 ContainerController 物件。
|
int — ContainerController 中第一個字元或圖形前的位置。
|
getControllerAt | () | 方法 |
public function getControllerAt(index:int):ContainerController
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
傳回位於指定索引的 ContainerController 物件。
參數
index:int — 要傳回之 ContainerController 物件的索引。
|
ContainerController — 位於指定位置的 ContainerController 物件。
|
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public class StandardFlowComposer_getControllerAt { public function findControllerIndexAtPosition(textFlow:TextFlow):void { var controller:ContainerController = textFlow.flowComposer.getControllerAt( 0 ); } } }
getControllerIndex | () | 方法 |
public function getControllerIndex(controller:ContainerController):int
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
傳回指定之 ContainerController 物件的索引。
參數
controller:ContainerController — 要尋找之 ContainerController 物件的參照。
|
int — 指定之 ContainerController 物件的索引,或是如果控制器未附加至此流排撰寫器則為 -1。
|
範例 ( 如何使用本範例 )
package flashx.textLayout.compose.examples { import flashx.textLayout.elements.TextFlow; import flashx.textLayout.container.ContainerController; public class StandardFlowComposer_getControllerIndex { public function getControllerIndex(textFlow:TextFlow, controller:ContainerController):void { var index:int = textFlow.flowComposer.getControllerIndex( controller ); } } }
interactionManagerChanged | () | 方法 |
public function interactionManagerChanged(newInteractionManager:ISelectionManager):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
一旦互動管理員有所變更時,就由 TextFlow 呼叫。
此函數是自動呼叫的。您的程式碼一般不需要呼叫此方法。可擴充 StandardFlowComposer 的類別可以覆寫此方法,以更新事件偵聽程式和其他相依於互動管理員的屬性。
參數
newInteractionManager:ISelectionManager — 新的 ISelectionManager 實體。
|
preCompose | () | 方法 |
removeAllControllers | () | 方法 |
public function removeAllControllers():void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
從這個 IFlowComposer 實體移除所有控制器。
removeController | () | 方法 |
public function removeController(controller:ContainerController):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
從這個 IFlowComposer 實體移除控制器。
參數
controller:ContainerController — 要移除的 ContainerController 實體。
|
removeControllerAt | () | 方法 |
setFocus | () | 方法 |
public function setFocus(absolutePosition:int, leanLeft:Boolean = false):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
將焦點設為包含 absolutePosition
參數所指定位置的容器。
StandardFlowComposer 會呼叫包含所指定文字流排位置之 ContainerController 物件的 setFocus()
方法。
參數
absolutePosition:int — 在容器的文字流排中指定接收焦點的位置。
| |
leanLeft:Boolean (default = false ) — 若為 true,而且位置在容器的第一個字元之前,則將焦點設為上一個容器的結尾。
|
相關 API 元素
setRootElement | () | 方法 |
public function setRootElement(newRootElement:ContainerFormattedElement):void
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
參數
newRootElement:ContainerFormattedElement |
updateAllControllers | () | 方法 |
public function updateAllControllers():Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
撰寫根元素的內容並更新顯示。
文字版面會分兩個階段進行:撰寫與顯示。於撰寫階段中,流排撰寫器會計算需要多少行才能顯示內容,以及這些行在流排顯示容器中的位置。於顯示階段中,流排撰寫器會更新其容器的顯示物件子系。updateAllControllers()
方法會依序起始這兩個階段。StandardFlowComposer 會記錄內容變更,以在必要時才執行完整的撰寫和顯示循環。
此方法會立即並同步更新所有文字行和顯示清單。
如果任何容器的內容有所變更,此方法會傳回 true
。
Boolean — 如果有任何變更則為 true。
|
updateToController | () | 方法 |
public function updateToController(index:int):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 10, AIR 1.5 |
撰寫並更新顯示的範圍到指定索引中的容器為止 (含此容器)。
updateToController()
方法會撰寫內容並將所有容器 (包含到指定索引中的容器為止 (含此容器)) 的顯示加以更新。例如,如果您有一連串的 20 個容器,然後指定索引為 10,updateToController()
可確保第 1 個到第 10 個 (索引 0 到 9) 容器都將予以撰寫和顯示。撰寫將於該點停止。如果 controllerIndex
為 -1 (或者未指定),則會更新所有容器。
此方法會立即並同步更新所有文字行和顯示清單。
如果任何容器的內容有所變更,此方法會傳回 true
。
參數
index:int (default = NaN ) — 最後一個要更新之容器的索引 (預設會更新所有容器)。
|
Boolean — 如果有任何變更則為 true 。
|
importToFlow()
方法建立的。
package flashx.textLayout.compose.examples { import flash.display.Sprite; import flashx.textLayout.compose.StandardFlowComposer; import flashx.textLayout.container.ContainerController; import flashx.textLayout.conversion.TextConverter; import flashx.textLayout.elements.TextFlow; public class StandardFlowComposer_ClassExample extends Sprite { private var 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"; private var flow:TextFlow; public function StandardFlowComposer_ClassExample() { var firstContainer:Sprite = new Sprite(); firstContainer.x = 180; firstContainer.y = 30; this.stage.addChild( firstContainer ); var secondContainer:Sprite = new Sprite(); secondContainer.x = 30; secondContainer.y = 130 this.stage.addChild( secondContainer ); var firstController:ContainerController = new ContainerController( firstContainer, 300, 100 ); var secondController:ContainerController = new ContainerController( secondContainer, 800, 600 ); flow = TextConverter.importToFlow( poem, TextConverter.PLAIN_TEXT_FORMAT ); flow.flowComposer = new StandardFlowComposer();; flow.flowComposer.addController( firstController ); flow.flowComposer.addController( secondController ); flow.flowComposer.updateAllControllers(); } } }
Tue Jun 12 2018, 03:47 PM Z