createTextFieldでスクロールバーをつける方法とは?

このQ&Aのポイント
  • createTextFieldを使用してテキストフィールドを作成し、そのフィールドにコンポーネントを適用してスクロールバーを付けることはできないのか?
  • Windows XP Flash MX Professional 2004を使用しているが、スクロールバーの取り付けができず困っている。
  • ダイナミックテキストのフィールドにコンポーネントを適用させることで、スクロールバーが表示されることがわかったが、スクリプトで作成したテキストフィールドにコンポーネントを適用させることはできない。アドバイスを求める。
回答を見る
  • ベストアンサー

createTextFieldで作ったテキストフィールドにスクロールバーをとりつける。

テキストツールでダイナミックテキストのフィールドをつくり、そこにコーンポーネントを適用させたら、スクロールバーがつく、とわかったのですが、スクリプトでテキストのフィールドをつくり、そのテキストフィールドにコンポーネントを適用させて、スクロールバーを取り付ける事はできないのでしょうか? this.createTextField("my_txt", 10, 5, 60, 205, 240); my_txt.htmltext = _level0.entry; このようにして、テキストフィールドに外部テキストをよみこんでいます。 アドバイスをいただきたいです。 http://livedocs.macromedia.com/flash/8_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00004232.html このページを見てもよく分からなく、スクロールバーの取り付けができません。 私が使っているのは、Windows XP Flash MX Professional 2004です。 よろしくお願いします。

  • Flash
  • 回答数2
  • ありがとう数3

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

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

#1です。 まず、「ライブラリ」パネルに UIScrollBar コンポーネントのシンボルはありますでしょうか? スクリプトだけ貼り付けても、ライブラリにスクロールバーのシンボルがなければ話が進みません。 Flash MX 2004 には最初は UIScrollBar コンポーネントがなく、バージョン 7.2 にアップデートすると追加されます。 起動時に出てくるタイトル画面か、「ヘルプ」メニュー→「 Flash Professional について」を選択すると、右下の方に Flash MX 2004 のバージョンが表示されます。 7.2 以外のバージョンになっている場合は、Adobe 社のサイトでアップデータを入手してアップデートしてください。  ・ Macromedia Flash MX 2004、Flash MX Professional 2004 バージョン7.2 日本語版アップデータ   http://www.adobe.com/jp/support/flash/downloads.html#flashmx2004 UIScrollBar のコンポーネントが追加されましたら、「コンポーネント」パネル(表示されていない場合は「ウィンドウ」メニュー→「開発パネル」→「コンポーネント」)から UIScrollBar コンポーネントのシンボルをステージにドラッグします。 これで、「ライブラリ」パネルにスクロールバーのシンボルが登録されます。 ステージに作られたインスタンスは削除してください。 リンケージの設定はとりあえず変更しなくても構いません。 attachMovie でスクロールバーが無事に挿入されたとしても、テキストフィールドに表示するテキストの行数が少なくスクロールの必要がない場合、スクロールバーは表示されずトラック(バーが移動するレール)の白い部分だけが表示されます。 スクロールバーがなくてもトラックだけでも表示されていれば、attachMovie はとりあえず成功しています。 トラックも何も表示されない場合は、attachMovie がそもそも失敗しているものと思われます。 リンケージ名の指定や、「リンケージプロパティ」でシンボルを最初のフレームに書き出すかどうかのチェックが外れていないかどうか確認してみてください。 チェックを外した場合は、シンボルを書き出すためにダミーをフレーム1以外のフレームに配置する必要があります。 attachMovie は、シンボルが書き出されるフレームよりも後で実行してください。 シンボルが書き出されているフレームよりも前のフレームで実行すると、シンボルが未定義になっていて attachMovie が失敗してしまいます。 また、UIScrollBar コンポーネントは ActionScript 2.0 という規格のスクリプトで作られています。 「パブリッシュ設定」の” Flash ”のタブに、「 ActionScript のバージョン:」という項目があります。 このリストで、必ず” ActionScript 2.0 ”を選択してください。 ちなみに Flash Player のバージョンは、ヘルプには 6 (ただし初期の Flash Player 6 は不可)でもいいようなことが書いてありますけれど、7 にした方が安全です。 -------------------------------------------------------------------- createTextField メソッドで作られるテキストフィールドは、単一行( multiline = false )・折り返しなし( wordWrap = false )になっています。 つまり、改行コードや <BR> タグがあっても無視して、1行にひたすらズラズラと出力するだけのテキストフィールドです。 これでは、たとえ何行もあるテキストを表示させたとしても結局は1行しかないことになり、スクロールバーは出てきません。 スクロールバーを利用する場合は、折り返しを必ず”あり”( wordWrap プロパティを true )に設定する必要があります。 スクリプトをまとめてみますと、大体、次のようになります。 このスクリプトはフレームに設定してください。 ライブラリに UIScrollBar コンポーネントのシンボルがあり、リンケージは初期設定のまま変更していないものとします。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //テキストフィールドを作成  this.createTextField("my_txt", 10, 5, 60, 205, 240);  //スクロールバーを挿入し、テキストフィールドに関連付ける  this.attachMovie( "UIScrollBar" , "sc_bar" , 11 , { _x : 210 , _y : 60 , _height : 240 } );  sc_bar.setScrollTarget( my_txt );  //テキストフィールドの設定  //HTMLを有効・複数行・折り返しあり・境界線あり  my_txt.html = true;  my_txt.multiline = true;  my_txt.wordWrap = true;  my_txt.border = true;  //ダミーのテキストを表示  //(このテキストは作品に合わせて変更してください)  my_txt.htmlText = "<B>あいうえお<BR>かきくけこ<BR>さしすせそ<BR>たちつてと<BR>なにぬねの<BR><BR></B>";  my_txt.htmlText += "<I>いろはにほへと<BR>ちりぬるを<BR>わかよたれそ<BR>つねならむ<BR><BR></I>";  my_txt.htmlText += "<U>1234567890</U><BR><BR>";  my_txt.htmlText += "ABCDEFG";  //テキストフィールドの文字サイズを20ptに設定  format = new TextFormat();  format.size = 20;  my_txt.setTextFormat( format ); ↑行頭の全角のスペースにだけ気を付けてコピーしていただければ、境界線のあるテキストフィールドにスクロールバーが付いて表示されます。(動作確認済み) 表示しているテキストはただの詰め物です。実際の作品では適宜変更してください。 なお、「ムービープレビュー」ではなぜか、1度テキストフィールドをクリックするかスクロールバーを動かすなどの操作をしないと一部のタグ(この例では <I> タグ)が有効にならないことがあるようです。 これはムービープレビューの時だけ起こる現象で、パブリッシュして HTML ファイルに組み込んだ時やスタンドアロンプレイヤーでは最初から有効になっています。

banrigreatwall
質問者

お礼

お礼が遅れて大変申し訳ありません。 教えて頂いた通りにしたところ、スクロールバーの取り付けに成功しました。 本当にありがとうございます。

その他の回答 (1)

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

予めテキストフィールドの位置も場所も決まっているのでしたら、その”配置予定地”を元にスクロールバーの位置を決めて、コンポーネントのインスタンスを最初から設置しておいてはいかがでしょう。 コンポーネントとは、編集可能なパラメータを持っている”ムービークリップ”です。 UIScrollBar コンポーネントは _targetInstanceName というパラメータを持っており、普段はここにスクロールさせたいテキストフィールドのインスタンス名(ターゲットパス)を指定するだけで利用できます。 しかし、今回の件ではスクロールさせるテキストフィールドは最初はステージに存在していないため、このパラメータにインスタンス名を指定しておいても無効になってしまいます。 これは要するに、テキストフィールドがステージに現れてからスクロールターゲットを指定すればいいということです。 スクロールバーのインスタンスを配置した場合は、createTextField でテキストフィールドを作った後で setScrollTarget メソッドでテキストフィールドのインスタンス名を指定してみてください。 ------------------------------------------------------------------ 先述の通り、コンポーネントは編集可能なパラメータを持っているムービークリップです。 ですから、ムービークリップが持っている機能や使えるスクリプトは、基本的にはコンポーネントでも利用できます。 (ただし、一部のスクリプトはコンポーネントの動作に支障をきたすことがあります) ライブラリにあるムービークリップシンボルは、attachMovie メソッドでムービーに動的に挿入できます。 attachMovie は UIScrollBar コンポーネントでも使用できます。 予めステージにスクロールバーを置かず、attachMovie で後から挿入する方法もあります。 attachMovie を使うには”リンケージ”という設定が必要です。 「コンポーネント」パネルから UIScrollBar コンポーネントをステージにドラッグすると、コンポーネントのシンボルが「ライブラリ」パネルに登録されます。 このシンボルには既にリンケージが設定されていますから、特に問題がなければリンケージの設定は不要です。 ステージにドラッグした時にスクロールバーのインスタンスが作られますが、これは削除してください。 後は普通のムービークリップと同様に、attachMovie でステージに配置できます。 スクロールバーのコンポーネントに設定されているリンケージ識別子は” UIScrollBar ”です。 ************************************ ご質問文のテキストフィールドの右端に縦のスクロールバーを付けるスクリプトは、次のようになります。 createTextField を実行した後に、このスクリプトを追加してください。 テキストフィールド(この場合は my_txt )の htmlText プロパティに表示する文字列を代入した後で setScrollTarget を実行すると、スクロールバーが動かなくなることがあります。 この代入演算を行う前に関連付けを済ませておいた方が無難だと思います。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //スクロールバーを挿入し、テキストフィールドに関連付ける  this.attachMovie( "UIScrollBar" , "sc_bar" , 11 , { _x : 210 , _y : 60 , _height : 240 } );  sc_bar.setScrollTarget( my_txt ); 挿入したスクロールバーには” sc_bar ”というインスタンス名を付けています。 以降は、” sc_bar ”という名前で追加したスクロールバーを操作できます。 attachMovie の引数で { } の中に入れて渡しているものはスクロールバーの位置と高さで、これらが sc_bar の各プロパティに設定されます。 スクロールバーのコンポーネントの基準点は左上で、この点の座標がスクロールバーの _x と _y プロパティに入ります。これを元に位置を決めてください。 createTextField で作ったテキストフィールドも、基準点は左上です。 つまり、例えば X = 5 ・ Y = 60 の地点に幅 205 ・高さ 240 のテキストフィールドを作ったとすると、右端(フィールドの外にスクロールバーを置く場合)とは X = 210 ・Y = 60 ということになります。 3番目の引数である深度(重ね順)は簡単に言いますと、数値の大きいものほど上に表示されます。 例えばテキストフィールドの深度を 10 にしたのなら、スクロールバーには 11 以上の深度を指定してください。 9 以下にすると、テキストフィールドの方が上に表示されます。 テキストフィールドが上になっていると、テキストフィールドに境界線や背景がある場合は特に、スクロールバーが見えなくなったり左端が欠けて表示されることがあります。 ************************************ デフォルトでは、スクロールバーのコンポーネントはフレーム1(最初のフレーム)に書き出されます。 Flash に付属のコンポーネントには複雑なスクリプトが組み込まれているため、概して容量が大きくなっています。 プリロード画面を作っている場合は、フレーム1に大量のデータが書き出されるとプリロードのアニメ等がなかなか始まらなくなってしまいます。 「ライブラリ」パネルでスクロールバーのコンポーネントのシンボルを選び、右クリックで出すメニューから「リンケージ...」を選択してください。「リンケージプロパティ」パネルが開きます。 「リンケージ:」の項目に”最初のフレームに書き出し”という項目があり、最初はチェックが入っています。 このチェックを外してください。 このチェックを外したシンボルは、何もしなければムービーに書き出されなくなります。 しかし、タイムラインのどこかに配置してあれば、最初に登場するフレームに1度だけシンボルが書き出されます。 この特徴を利用して、ムービーに書き出すためのダミーのインスタンスをフレーム1以外のフレームに置いておくと、任意のフレームに書き出すことができます。 attachMovie で動的に挿入しようとすると少々面倒です。 「ムービープレビュー」ではムービーが全て読み込まれた状態になっているのであまり問題が起こらないのですが、実際にネットで公開した時は、シンボルが読み込まれているかいないか、テキストフィールドが無事に作られたかどうか、テキストが読み込まれたかどうかなど、ごくわずかなタイミングの違いで動作が不安定になる可能性もあります。 テキストフィールドの位置も大きさも決まっているのでしたら、わざわざスクリプトでテキストフィールドを作る必要もないと思います。 最初からテキストフィールドとスクロールバーを配置しておくと、位置や大きさもムービー編集中に画面を見ながら変更できて扱いも簡単です。 ヘルプでは、ムービークリップやテキストフィールドをスクリプトで動的に作っているサンプルをよく見かけます。 これは、”インスタンス名を○○と付けて、このスクリプトをどこそこに書く”などとややこしいことをしなくても、スクリプトをコピーするだけで動作を確認できるようにするという、それだけの理由です。 ムービークリップやテキストフィールドをスクリプトで動的に作ることが推奨されているのではありません。

banrigreatwall
質問者

お礼

DPEさん。要領を得ない質問に丁寧に回答していただき、ありがとうございます。 早速これから、試してみようと思います。

banrigreatwall
質問者

補足

返事が遅れて大変申し訳ありません。 アドバイスいただいたようにやってみたのですが、スクロールバーを付けることができませんでした。 //スクロールバーを挿入し、テキストフィールドに関連付ける this.attachMovie( "UIScrollBar" , "sc_bar" , 11 , { _x : 210 , _y : 60 , _height : 240 } );  sc_bar.setScrollTarget( my_txt ); これを貼り付けさせていただいたのですが、できませんでした。 もう少し、アドバイスをいただけないでしょうか? よろしくお願いします。

関連するQ&A

  • テキストフィールドにスクロールバーを設置

    テキストフィールドをダイナミックテキストに指定し、 複数行に設定した後にコンポーネントパネルから「ScrollBar」をフィールドの右側にドロップしてからパブリッシュをしたのですが、 swfファイルを見てみると全くスクロールバーが作動していませんでした。 テキスト内には外部ファイル(txt)を読み込んでいるのですが、、、 そのときに使用したASは this.loadVariables("xxx.txt") で、これを1フレーム目に記述しました。 一応txtファイルに記述した適当な日本語文はきちんと表示されていました。 一体どこが原因でスクロールバーが作動しないのでしょうか? よろしくお願いします。

  • スクロールバーが一番したまで来たときにボタンが表示される。

    質問させてください。 createtextfieldでつくったテキストフィールドにコンポーネントを使って、スクロールバーを適用させています。 そのスクロールバーのスライダが一番下まで来たときに、ボタンを表示させたいのです。 しかし、その条件設定がどうしたらいいのかわからず、なやんでいます。 自作のスクロールボタンだと、ボタンを押したときにmaxscrollなら、という条件設定で実現できたのですが、コンポーネントの場合は、どういう風にすればいいのかわからず、困っています。 もしよろしかったら、教えていただければ、幸いです。 私が使っているのは、 WIN XP FLASH MX 2004 です。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • UIScrollBarを利用したスクロールバーが見えない

    Flash8を使ってAS2.0で書いています。 ダイナミックテキストフィールドに、スクロールバーを表示させたいため、 www.helpexamples.com/flash/lorem.txt の下半分を参考にして、ActionScrioptでスクロールバーを作成しようとしています。 しかし、このページに載っているサンプルコードをそのままコピー&ペーストしても、 スクロール動作自体には問題ないものの、 スクロールバー本体が表示されません。 これでは、一見して文章の続きがあるかがわかりにくいので、 コンポーネントパネルからドラッグして作成した場合のように、 スクロールバーを表示させたいのですが、方法がわかりません。 this.createClassObject(mx.controls.UIScrollBar, "my_sb", 20); の最後の20という数字をいろいろ変えてみたり、 my_sb.move(my_txt._x + my_txt._width, my_txt._y); の中の数値を色々変えてみたりしたのですが、表示されませんでした。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 【緊急】スクロールバーの色の変更

    いつも緊急ですみません。 Flash8でコンポーネントのスクロールバーの色を変更したいのです。白だと色々と見栄えが…(汗 QNo.2770806さんの質問や、こちらのサイトを見たりしたのですが、よく分かりません。 http://livedocs.adobe.com/flash/8_jp/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00003003.html コンポーネントのサンプルを立ち上げると色々出てきますよね? どれの色を変えたらよいのかがさっぱりです。 どうしたらよろしいのでしょうか?

    • ベストアンサー
    • Flash
  • FLASH8でテキストに付属させるスクロールバーがうまく付けられません

    FLASH8を使っています。 テキストに付属させるスクロールバーの設置がうまくいきません。 外部のテキストファイルを読み込ませているんですが、 テキスト部分は問題なく設定できました。 スクロールバーをコンポーネントのUIScrollBarで設置しましたが プレビューを見るとスクロールバーの部分が 真っ白で表示がおかしく、機能もしません。 テキストの範囲内に設置もしていますし 何が原因なのかわからない状態です。 どなたか解決策を教えて頂けないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • 読み込んだ外部テキストのHTMLを有効にする。

    this.createTextField("my_txt", 10, 5, 60, 205, 240); my_txt.textColor = 0x333333; my_txt.html = true; my_txt.htmltext = _level0.allentry; my_txt.htmlText = this.allentry; 質問させてください。 上記のスクリプトで外部テキストを読み込んでいます。 変数allentryにはhtmlから変数を渡して、外部テキスト(MTのエントリ)を読み込んでいます。 読み込んだ外部テキストのhtmlタグの部分が表示されなくなってしまいます。 イメージタグなら、<img= とだけ表示されてその後の文章が表示されません。 どうしたらいいでしょうか? アドバイスをいただきたいです。 よろしくお願いします。 私が使っているのは、 windows xp Flash MX 2004 です。

  • FlashMXのスクロールバーに関して

    こんにちわ、 win2000でFlashMXを使用し作業をしています。 外部ファイルを読み込み、テキスト表示をする際、UIコンポーネントのスクロールバーを使用しました。 しかし、テキストボックスの大きさまでは表示されるのですが、全ての文書を見ることが出来ません。 文章をスクロールさせたいのですが、どうすれば出来るのでしょうか? ちなみにアクションスクリプトは System.useCodepage = true; this.loadVariables("test.txt");{ _root.newtxt.condenseWhite = true; } で外部ファイル"test.txt"を読み込んでます。 そのほかはスクリプトを組んでません。 UIコンポーネントのスクロールのプロパティでは、 ●Target TextField → newtext(テキストボックスのインスタンス名) ●Horizontal → false になってます。 レイヤーは ・テキストボックス ・スクロールバー 一つ一つ分かれています。 もしわかるかたがいらっしゃれば教えていただければと思います。 また説明として不十分であればおっしゃってください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • テキストフィールド+UIScrollBarについて

    外部ファイルをダイナミックテキストとしてテキストフィールドに読み込んでいます。 System.useCodepage = true ; loadVariablesNum("test.txt", 0); UIScrollBarでターゲットをテキストフィールドのインスタンス名を指定するのですが、スクロールバーが表示されません。FLASH初心者ですが、助言などありましたら、お願いします。 2004MX Profationalです。

    • ベストアンサー
    • Flash
  • テキストフィールドの別のテキストフィールドから一定の距離に生成

    Flash8を使用して、AS2で書いています。 createTextFieldでテキストフィールドを自動生成しています。 その内容は、外部XMLファイルから読み込まれたものが入ります。 読み込まれる内容により、その長さが異なるので、 autosizeをtrueにしています。 そのテキストフィールドの下に、 別のテキストフィールドを自動生成しているのですが、 できれば、常に上のテキストフィールドの下端から一定の距離に 生成されるようにしたいのですが、 (htmlならmargin-top:1em;のように。) 何か適当な方法はないでしょうか。

    • ベストアンサー
    • Flash
  • スクロールバーの設定

    外部テキストを読み込んで、autoSizeのテキストフィールドに表示させ、そのテキストフィールドにスクロールバーをつけたいと考えています。 外部テキストを読み込んで、autoSizeのテキストフィールドに表示させることはできました。 スクロールバーの方は、テキストフィールドに付いてはいるんですがautoSizeに対応しないため、機能せず。という状況です。 環境:Windows XP/Flash MX 色々調べても解決出来なかったので困っています。 よろしくお願いします。

専門家に質問してみよう