前回の第40回
Text Layout Framework Markup形式のXMLデータを外部ファイルから読込む
XMLデータは、
<TextFlow xmlns='http://ns.adobe.com/textLayout/2008'>
<p textAlign='center'>
<span fontFamily='Impact' fontSize='18'>
Using a TextFlow object to structure text data
</span>
</p>
<p>
<span>
When you use the Text Layout Framework, text content is structured and stored in a TextFlow object.
</span>
</p>
</TextFlow>
外部XMLファイルの読込みは、
![第40回図3 Text Layout Frameworkにおけるオブジェクトの関係(再掲) 第40回図3 Text Layout Frameworkにおけるオブジェクトの関係(再掲)](/assets/images/dev/serial/01/as3/0040/thumb/TH800_05.gif)
まず、
// フレームアクション
import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.compose.IFlowComposer;
import flashx.textLayout.formats.TextLayoutFormat;
var container:Sprite = new Sprite();
var markUp:XML;
var myFlow:TextFlow;
var controller:ContainerController = new ContainerController(container, 240, 100);
var composer:IFlowComposer;
var my_fmt:TextLayoutFormat = new TextLayoutFormat();
// 外部XMLファイルの読込み
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("tlf.xml");
myLoader.addEventListener(Event.COMPLETE, xSetText);
myLoader.load(myRequest);
addChild(container);
// 読込み完了時の処理
function xSetText(eventObject:Event):void {
markUp = XML(eventObject.target.data);
myFlow = TextConverter.importToFlow(markUp, TextConverter.TEXT_LAYOUT_FORMAT);
// デフォルトフォーマットの設定
myFlow.hostFormat = my_fmt;
my_fmt.fontFamily = "Helvetica";
my_fmt.fontSize = 14;
composer = myFlow.flowComposer;
composer.addController(controller);
composer.updateAllControllers();
}
[ムービープレビュー]を確かめると、
![Helveticaの14ポイントをデフォルトに設定 Helveticaの14ポイントをデフォルトに設定](/assets/images/dev/serial/01/as3/0041/thumb/TH170_007.gif)
![デフォルトフォーマットなし デフォルトフォーマットなし](/assets/images/dev/serial/01/as3/0041/thumb/TH170_008.gif)
Text Layout Frameworkにユーザーインタラクションを加える
つぎは、
![図2 [プロパティ]インスペクタで[TLFテキスト]のテキストの種類が選べる 図2 [プロパティ]インスペクタで[TLFテキスト]のテキストの種類が選べる](/assets/images/dev/serial/01/as3/0041/thumb/TH400_006.png)
ところが、
TextFlowオブジェクト.interactionManager = new SelectionManager();
前掲スクリプト1にこのステートメントを加え、
// フレームアクション
import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.compose.IFlowComposer;
import flashx.textLayout.formats.TextLayoutFormat;
import flashx.textLayout.edit.SelectionManager;
var container:Sprite = new Sprite();
var markUp:XML;
var myFlow:TextFlow;
var controller:ContainerController = new ContainerController(container, 240, 100);
var composer:IFlowComposer;
var my_fmt:TextLayoutFormat = new TextLayoutFormat();
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("tlf.xml");
myLoader.addEventListener(Event.COMPLETE, xSetText);
myLoader.load(myRequest);
addChild(container);
function xSetText(eventObject:Event):void {
markUp = XML(eventObject.target.data);
myFlow = TextConverter.importToFlow(markUp, TextConverter.TEXT_LAYOUT_FORMAT);
myFlow.hostFormat = my_fmt;
myFlow.interactionManager = new SelectionManager();
my_fmt.fontFamily = "Helvetica";
my_fmt.fontSize = 14;
composer = myFlow.flowComposer;
composer.addController(controller);
composer.updateAllControllers();
}
![図3 配置したテキストが選択できる 図3 配置したテキストが選択できる](/assets/images/dev/serial/01/as3/0041/thumb/TH400_001.gif)
TextFlow.
// import flashx.textLayout.edit.SelectionManager;
import flashx.textLayout.edit.EditManager; // 変更
function xSetText(eventObject:Event):void {
// ...[中略]...
// myFlow.interactionManager = new SelectionManager();
myFlow.interactionManager = new EditManager(); // 変更
// ...[中略]...
}
![図4 TextFlow.interactionManagerプロパティにEditManagerインスタンスを設定するとテキストが編集できる 図4 TextFlow.interactionManagerプロパティにEditManagerインスタンスを設定するとテキストが編集できる](/assets/images/dev/serial/01/as3/0041/thumb/TH800_002.gif)
![テキストを選択 テキストを選択](/assets/images/dev/serial/01/as3/0041/thumb/TH170_003.gif)
![テキストを書替え テキストを書替え](/assets/images/dev/serial/01/as3/0041/thumb/TH170_004.gif)
さらに、
// フレームアクション
import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flashx.textLayout.elements.TextFlow;
import flashx.textLayout.conversion.TextConverter;
import flashx.textLayout.container.ContainerController;
import flashx.textLayout.compose.IFlowComposer;
import flashx.textLayout.formats.TextLayoutFormat;
import flashx.textLayout.edit.EditManager;
import flashx.undo.UndoManager;
var container:Sprite = new Sprite();
var markUp:XML;
var myFlow:TextFlow;
var controller:ContainerController = new ContainerController(container, 240, 100);
var composer:IFlowComposer;
var my_fmt:TextLayoutFormat = new TextLayoutFormat();
var myLoader:URLLoader = new URLLoader();
var myRequest:URLRequest = new URLRequest("tlf.xml");
myLoader.addEventListener(Event.COMPLETE, xSetText);
myLoader.load(myRequest);
addChild(container);
function xSetText(eventObject:Event):void {
markUp = XML(eventObject.target.data);
myFlow = TextConverter.importToFlow(markUp, TextConverter.TEXT_LAYOUT_FORMAT);
myFlow.hostFormat = my_fmt;
myFlow.interactionManager = new EditManager(new UndoManager());
my_fmt.fontFamily = "Helvetica";
my_fmt.fontSize = 14;
composer = myFlow.flowComposer;
composer.addController(controller);
composer.updateAllControllers();
}
編集の取消しは[Ctrl](Windows)/[command](Mac)+[z]、
第39回より3回にわたって、
![図5 クラスSelectionManagerはインターフェイスISelectionManagerを実装する 図5 クラスSelectionManagerはインターフェイスISelectionManagerを実装する](/assets/images/dev/serial/01/as3/0041/thumb/TH400_005.gif)
今回解説した次のサンプルファイルがダウンロードできます。
- サンプルファイル
(CS5形式/約25KB)