package { import flash.display.Sprite; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; import flash.geom.Rectangle; public class getCharBoundariesTest extends Sprite { private var dispStr : String = "getCharBoundaries\nTest\nSample"; private var baseFld : TextField; private var baseFmt : TextFormat; private var charContainer : Sprite; private var marginX : Number; private var marginY : Number; public function getCharBoundariesTest() { // stage 定義 stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; // 各種処理 createBaseTextField(); positionBaseTextField(); createContainer(); createBoundaries(); } // テキストフィールドとテキストフォーマットの生成 private function createBaseTextField():void { // テキストフィールド生成・定義 baseFld = new TextField(); baseFld.text = dispStr; baseFld.autoSize = TextFieldAutoSize.LEFT; baseFld.border = true; baseFld.borderColor = 0x0000ff; baseFld.embedFonts = true; baseFld.selectable = false; addChild( baseFld ); // テキストフォーマット生成・定義 baseFmt = new TextFormat(); baseFmt.font = "Times New Roman"; baseFmt.size = 24; baseFmt.color = 0x000000; // baseFmt.align = TextFieldAutoSize.LEFT; baseFmt.align = TextFieldAutoSize.CENTER; // baseFmt.align = TextFieldAutoSize.RIGHT; // テキストフォーマット適用 baseFld.setTextFormat( baseFmt ); } // テキストフィールドの配置決定 private function positionBaseTextField():void { marginX = ( stage.stageWidth - baseFld.width ) * 0.5; marginY = ( stage.stageHeight - baseFld.height ) * 0.5; baseFld.x = marginX; baseFld.y = marginY; } // 文字の境界ボックス用コンテナ生成 private function createContainer():void { charContainer = new Sprite(); addChild( charContainer ); } // 文字の境界ボックスを作成・表示 private function createBoundaries():void { var len : uint = baseFld.length; var str : String = baseFld.text; var chr : String; var r : Rectangle; while ( len-- ) { chr = str.charAt(len); r = baseFld.getCharBoundaries(len); if( (chr!=" ") && (r!=null) ) { drawBoundary( r ); } } } // 文字の境界ボックスを描画 private function drawBoundary( r:Rectangle ):void { charContainer.graphics.lineStyle( 0 , 0xff0000 ); charContainer.graphics.drawRect( r.x+marginX , r.y+marginY , r.width , r.height ); } } }