« links for 2010-12-17 | Home | links for 2010-12-19 »

Dec 192010

TextAreaへのStyleSheet適応

fl.controls.TextAreaクラス。
納品物として使うことはまずないのだけど、デバッグとかでアウトプット表示に使うことは多々あります。で、そのアウトプットテキストの中にシーン遷移のリンクを入れたりしたい時に、StyleSheetを適応すると便利だろと。

で、以前はTextAreaに"stylesheet"というプロパテイがあった気がするのですが、今見てみると無い。(そのかわり"textField"というプロパティが追加されて、コンポーネント内部のtextFieldが直接参照できるようになっている。

で、textField.stylesheetとしてOKか?と言われるとそんなことは無く、

Error: Error #2009: このメソッドは、スタイルシートを使用するテキストフィールドに対しては使用できません。
at flash.text::TextField/setTextFormat()
at fl.controls::TextArea/drawTextFormat()
at fl.controls::TextArea/draw()
at fl.core::UIComponent/callLaterDispatcher()
こんなエラーが戻って来ます。
基本的にtextFieldで管理するんだから、styleSheet等使うんじゃない!ゴルァ!と言う感じの対応ですが、かろうじて"drawTextFormat"が"protected"なので、extendsで対応することにします。

package display
{
	import fl.controls.TextArea;
	public class ExTextArea extends TextArea
	{
		public function ExTextArea() {
			super();
		}
		
        override protected function drawTextFormat():void {
            if (!textField.styleSheet) {
				super.drawTextFormat();
			}
            else {
                setEmbedFont();
                if(_html) textField.htmlText = _savedHTML;
            }
        }
	}
}
こんな感じでとりあえず使えるようになります。 ただそもそもAdobeが何故StyleSheetを使用不可にしたのか? 致命的に解決できないバグがあるのか?は不明です。

その辺ご了承ください。

Leave a comment

Search and Archives