feb19.jp

Nobuhiro Takahashi
Designer / Engineer

AS2でTextFieldの行数を取得する

AS2でTextFieldの行数を取得する

AS2ではTextFieldの行数を取得するためのプロパティやメソッドはありません(AS3にはTextField.numLinesがあります)。

AS2でTextFieldの行数を取得するには、TextField.maxscrollを使えば、取得することはできるのですが、TextFieldの行間(TextFormat.leading)を操作してしまうと、TextField.maxscrollの値が変化してしまうので、想定する行数とは異なる値になってしまうことがあります。

具体的にはAS2でTextFieldの行間(leading)を「2」以外にすると、Textfield.maxscrollは表示されるテキストの行数とは異なる行数を返します。

FlashのTextFieldのデフォルトの行間が「2」のようで(たとえばFlashを起動したばかりの時に、TextFieldを「テキストツール」を使って作った時は、行間が自動的に「2」と指定されています)、これと違った値にすると、maxscrollの値が、行数とはリンクしていない値になってしまいます。

というわけで、AS2で行数を取得したい場合は、「TextFormat.leading = 2」とTextField.setTextFormat()で一旦行間をデフォルトの値に置き換えておいて、その間にTextField.maxscrollで行数を取得して、もとの行間に戻す、というようにする必要があるようです。

めんどくさいので、便利クラスを作ってみました。

TextFieldUtilities.as
 
class TextFieldUtilities
{
	public static function numLines(tf:TextField):Number
	{
		var fmt:TextFormat = tf.getTextFormat();
		var leading_fmt:TextFormat = new TextFormat();
		leading_fmt.leading = 2;
		tf.setTextFormat(leading_fmt);
		var num:Number = tf.maxscroll;
		tf.setTextFormat(fmt);
		return num;
	}
}

使い方は、「tf」というインスタンス名のTextFieldをステージ上に置いて、

tf.text = "うんこうんこうんこうんこうんこうんこ";
trace(TextFieldUtilities.numLines(tf));

とかやると、TextFieldに表示されているテキストの行数を調べることができます。

ちなみにテキストフィールドは、複数行(tf.multiline = true)であることが必須です。

Tweet Share Bookmark

Navigation

prev: FlashPlayer 10 beta 2 が出てる
next: AS2で読み込んだ外部画像にスムージングを適用する

Recently Entries