サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

TextField.maxscrollの値が更新されない

ID: FN0307004 Product: Flash

Platform: All
Version: MX

1. 現象
ダイナミックテキストまたはテキスト入力フィールドでテキストが表示しきれていない場合に、'TextField._widht'や'TextField._hight'プロパティを変更してテキストフィールド内の総行数が変わっても、'TextField.maxscroll'プロパティが更新されないことがあります。

2. 原因
テキストフィールド(TextField)の'TextField._width'や'TextField._height'プロパティを変更した直後には、'TextField.maxscroll'プロパティの値が更新されないようです。値が更新されるには、つぎのフレームの描画を待つ必要があります。

たとえば、以下のスクリプトは、TextFieldにテキストを設定し、'TextField._width'および'TextField._height'プロパティを変更した直後に、'TextField.maxscroll'プロパティの値を調べてテキストの最終行までスクロールしようとしています。しかし、'TextField.maxscroll'プロパティの値が正しくないために、最終行は表示されません。なお、スクリプトは現象が確認しやすいように、ダイナミックにTextFieldインスタンスを作成しています('MovieClip.createTextField'メソッドを使用)。

// [問題が発生するスクリプトの例]
// メインのタイムライン
// フレームアクション
text_str = "ダイナミックテキストまたはテキスト入力フィールドでテキストが表示しきれていない場合に、'TextField._widht'や'TextField._hight'プロパティを変更してテキストフィールド内の総行数が変わっても、'TextField.maxscroll'プロパティが更新されないことがあります";
text_str += newline+"【最終行】";
// TextFieldインスタンスの作成
_root.createTextField("my_txt", 1, 50, 50, 10, 10);
temp_txt = _root.my_txt;
temp_txt.multiline = true;
temp_txt.wordWrap = true;
temp_txt.border = true;
temp_txt.text = text_str;
// 'TextField._width'および'TextField._height'プロパティの変更
temp_txt._width += 50;
temp_txt._height += 100;
// temp_txt.text = temp_txt.text; //【対処法】このステートメントを有効に
// 'TextField.maxscroll'プロパティの値を調べてスクロール
temp_txt.scroll = temp_txt.maxscroll;
// プロパティ値を出力
trace("before: scroll = "+_root.my_txt.scroll+", maxscroll = "+_root.my_txt.maxscroll);
// つぎのフレームの描画を待つ
this.onEnterFrame = function() {
   if (this.bWaited) {
    // プロパティ値を出力
     trace("after: scroll = "+_root.my_txt.scroll+", maxscroll = "+_root.my_txt.maxscroll+newline);
     this.bWaited = false;
     delete this.onEnterFrame;
   } else {
     this.bWaited = true;
   }
};

[出力]ウィンドウには、'TextField._width'および'TextField._height'プロパティ変更直後と、1フレーム経過して描画更新後の'TextField.scroll'と'TextField.maxscroll'プロパティの値が表示されます。出力結果からは、たとえば以下のように'TextField.maxscroll'プロパティの値が、描画更新前と後とで異なっていることが確認できます。

// [出力]ウィンドウの結果例
before: scroll = 2, maxscroll = 2
after: scroll = 2, maxscroll = 8

3. 対処法
対処法のひとつとして、上記サンプルスクリプトの要領で、1フレーム描画の更新を待って処理することが考えられます。

もうひとつは、'TextField._width'や'TextField._height'プロパティを変更した後に、'TextField.text'プロパティでテキストを取出し、改めて'TextField.text'プロパティに設定する方法です。上記サンプルスクリプトでコメントアウトされているステートメントを有効にすると、正しくスクロールが実行され、最終行が表示されます。

_____

作成者: 野中文雄
作成日: 2003年7月20日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.