• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:FlashMXのスクロールバーに関して)

FlashMXのスクロールバーの設定方法と使い方

このQ&Aのポイント
  • FlashMXを使用して外部ファイルを読み込む際に、UIコンポーネントのスクロールバーを使用してテキスト表示を行いたい場合、適切なスクロールバーの設定が必要です。文章が表示されるが全てを見ることができない問題を解決するためには、適切なプロパティの設定が必要です。
  • スクロールバーのプロパティには、Target TextField(表示対象のテキストボックスのインスタンス名)やHorizontal(水平スクロールの設定)などがあります。
  • 詳しい設定方法や使い方に関しては、ActionScriptの設定やスクリプトの組み方を含めて説明することができます。質問内容に不足があれば、追加で情報を提供していただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

例えば、テキストファイル test.txt の内容が  test=テスト だとします。 このファイルを、メインのタイムラインで  this.loadVariables( "test.txt" ); として読み込むと、_root 階層に変数 test が定義され、その中身が”テスト”という文字列になります。 ダイナミックテキストでは変数の内容を表示できます。 _root 階層、つまりステージにあるダイナミックテキストで、プロパティの「変数:」の項目に test と入れておくと、_root にある変数 test を表示するという意味になります。 読み込んだテキストがダイナミックテキストに表示される仕組みは、このようになっています。 しかし、#1に書きましたように、ScrollBar コンポーネントを利用する場合は、「変数:」の項目に変数名を入力しただけではスクロールバーは動きません。 それでも、テキストフィールドに表示する内容が、読み込んできた変数 test であることには変わりませんから、  _root.newtext.text = _root.test; で、テキストフィールドに表示する内容を設定できます。 ただし、このスタイルで内容を操作する際は、変数が読み込み終わるまで待つ工夫が必要です。 Flash では、外部から変数や画像・ムービーを読み込んでくることができます。 変数は画像・ムービーに比べると容量が小さく、単純なデータですが、たとえ通信回線を介さない「ムービープレビュー」での動作確認の時であっても、他のファイルを開き、内容を解析してファイルを閉じ、Flash 内に変数を定義する・・・といった処理が、読み込みの命令を出した次の一瞬で完了することはまずありえません。 ですから、  this.loadvariables( "test.txt" );  _root.newtext.text = _root.test; では、変数 test は未定義で、その状態で text プロパティに入れているのですから、テキストフィールドは空白のままになってしまいます。 読み込みの終了を待つ方法はいくつかありますが、MovieClip オブジェクトの持つ loadVariables メソッドで読み込んだ場合は、読み込み演算が終わると発生する data イベントが利用できます。 スクリプトにしますと、次のようになります。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //外部テキストファイルを読み込む  this.loadVariables( "test.txt" );  //読み込み終了時に、テキストフィールドに表示  this.onData = function()  {   _root.newtext.text = _root.test;  }; 長くなってすみませんでした。 不明な点がありましたら、また補足してください。

ogoo
質問者

お礼

ありがとうございます。 すごくわかりやすかったです。 このプログラムがなにをしているか理解できました。 また、長文を記述した場合、テキストボックスからはみでる部分が表示されず、スクロールバーが機能しなかったんですが、上記のスクリプトを記述した次のフレームで、 sb.setScrollTarget(newtxt); と記述したら、動作しました。 これはなくてはならないものなんでしょうか? それにしても、助かりました。少し苦手意識がなくなりそうです。ありがとうございます。

その他の回答 (2)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

ScrollBar はコンポーネントなので、ステージ上のインスタンスを選択して「プロパティ」パネルを見ますと、「プロパティ」と「パラメータ」という2つのタブが表示されているはずです。 コンポーネントとは、編集可能なパラメータを持つムービークリップのことで、そのパラメータを編集するものが「パラメータ」のタブです。 ScrollBar コンポーネントが持っているパラメータは、次の2つです。  ・Target TextField   スクロールバーを利用するテキストフィールドのインスタンス名。  ・Horizontal   横スクロールの切り替えフラグ。true で横、false で縦のスクロールバーになります。 Target TextField パラメータにテキストフィールドのインスタンス名を入力することは、setScrollTarget を実行することと同じです。 ですから、通常は、「パラメータ」のタブでテキストフィールドのインスタンス名を指定したのならば、setScrollTarget は実行しなくても構いません。 Target TextField パラメータを入力してあるにも関わらず、setScrollTarget を実行しないとスクロールバーが動作しなかったとはよく分かりませんが、おそらく、インスタンス名が違っているなどの些細な間違いが原因だと思います。 #2の補足欄にある setScrollTarget では、テキストフィールドのインスタンス名が”newtxt”ですが、ご質問文の Target TextField では ”newtext”となっていますよね。この違いではないでしょうか。

ogoo
質問者

お礼

すいません。確認したところTarget TextField を間違ってました。”newtext”を”newtxt”と変更したところ、 setScrollTarget の記述なしでも動作しました。 初心者のわたしにわかりやすいように説明してくださってありがとうございます。 感謝です。

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

読み込んだ変数を表示するダイナミックテキストを ScrollBar コンポーネントでスクロールさせる場合は、プロパティの「変数:」に変数名を設定しただけでは、スクロールバーは正常に動作しません。 「ダイナミックテキスト」か「テキスト入力」にしたテキストフィールドは、TextField オブジェクトで制御しています。 TextField オブジェクトには text というプロパティがあります。テキストフィールド内に表示する文字列を管理しているもので、書き換えると、表示する内容を変更することもできます。 ScrollBar コンポーネントの動作は、この text プロパティと関係があります。 変数の読み込み完了を確認してから、  newtext.text = 変数名; このように、text プロパティに変数の内容を代入してみてください。 ところで、condenseWhite プロパティは、HTML タグを利用する時に余計な空白や改行をカットするための設定( HTML が無効になっているテキストフィールドでは意味を持ちません)ですが、読み込むテキストは HTML タグが付いているものでしょうか? HTML タグ付きのテキストの場合は、text プロパティに代入すると、タグが解釈(レンダリング)されず、タグが付いた状態で表示されてしまいます。 HTML タグをレンダリングする時の同等の機能として、htmlText というプロパティがあります。HTML タグをご利用の際は、text プロパティではなくこちらに代入してください。

ogoo
質問者

お礼

早速のお返事ありがとうございます。 読み込むテキストは HTML タグが付いていないものです。 色色ソースをかきこんだり、消したりしていたので、混乱してました。あまり良くわかってないようでした。 教えてくれてありがとうございます。 newtext.text = 変数名; ですが,この変数は何の変数を記述すればよいんでしょうか? ・this.loadVariables("test.txt"); の変数だとおもったのですが、読み込んだものは どのように変数に入力すればよいのでしょうか? ネットでしらべたんですが、なかなか手がかりになるものがありませんでした。 また、 ・テキストボックスの変数かと思い、入力したところ、表示されなくなってしまいました。 もしよろしければ教えていだけたら幸いです。 よろしくお願いします。