Home > flash > TextField に leading + autoSize を設定すると...

TextField に leading + autoSize を設定すると...

  • Posted by: non
  • 2008年10月27日 02:54
  • flash

自分用メモ。

leading で行間を指定しつつ、autoSize でサイズ調整を行うと、テキストを選択したときにスクロールしてしまう。
その原因と解決方法について書いてみる。

まずは、実際に leading + autoSize を設定。

import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;

const SAMPLE_TEXT:String = "テストテストテストテストテストテストテストテストテストテストテスト
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテス
トテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテ
ストテストテスト";
const LEADING_SIZE:Number = 4;

var textFormat:TextFormat = new TextFormat();
textFormat.leading = LEADING_SIZE; // leading を設定

var textField:TextField = new TextField();
textField.defaultTextFormat = textFormat;
textField.width = 300;  // 横幅固定
textField.multiline = true;  // 複数行設定
textField.wordWrap = true;  //折り返し設定
textField.text = SAMPLE_TEXT;
textField.autoSize = TextFieldAutoSize.LEFT;

addChild( textField );

表示されたテキストを選択して、マウスカーソルを上下に動かすとスクロールする。Windows だとマウスホイールでスクロールしても動いてしまう。

Alternative content

表示するためには最新の Flash Player が必要です。

Get Adobe Flash player

この現象の原因

いろいろ検証してみた結果、スクロールしてしまうのは leading + autoSize を設定したときの height の値が誤りが原因だと判明。leading を設定すると、行間だけではなく最終行の下にもleading 値分のマージンができてしまうようだ。そのマージンが height に反映されていないためにスクロールしてしまうようだ。

解決策1

いったん autoSize を設定して、その height を保存した後で、 autoSize を TextFieldAutoSize.NONE に、height を 保存した height + leading の値 にする。

import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;

const SAMPLE_TEXT:String = "テストテストテストテストテストテストテストテストテストテストテスト
テストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテス
トテストテストテストテストテストテストテストテストテストテストテストテストテストテストテストテ
ストテストテスト";
const LEADING_SIZE:Number = 4;

var textFormat:TextFormat = new TextFormat();
textFormat.leading = LEADING_SIZE;

var textField:TextField = new TextField();
textField.defaultTextFormat = textFormat;
textField.width = 300;  // 横幅固定
textField.multiline = true;  // 複数行設定
textField.wordWrap = true;  //折り返し設定
textField.text = SAMPLE_TEXT;
textField.autoSize = TextFieldAutoSize.LEFT;
var h:Number = textField.height;
textField.autoSize = TextFieldAutoSize.NONE;
textField.height = h + LEADING_SIZE;

addChild( textField );

選択してもスクロールしても動かない。

Alternative content

表示するためには最新の Flash Player が必要です。

Get Adobe Flash player

解決策2

テキストの選択とマウスホイールによるスクロールができないようにする。

textField.selectable = false;
textField.mouseWheelEnabled = false;

heteml banner

Comments:0

Comment Form

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://nondelion.com/cms/mt-tb.cgi/115
Listed below are links to weblogs that reference
TextField に leading + autoSize を設定すると... from nondelion.com

Home > flash > TextField に leading + autoSize を設定すると...

Search
Feeds

Return to page top