スクロールバーが一番下まで来たときにボタンを表示させる方法について

このQ&Aのポイント
  • スクロールバーを適用したテキストフィールドで、ボタンを一番下までスクロールバーが来た時に表示させたいです。しかし、どのように条件を設定すればよいのかわからず困っています。
  • 自作のスクロールボタンでは、ボタンを押したときにmaxscrollなら表示するという条件設定で実現できましたが、コンポーネントの場合はどのようにすればよいのかわかりません。
  • 使用している環境はWindows XPとFlash MX 2004です。お知恵をいただけると幸いです。
回答を見る
  • ベストアンサー

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

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

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

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

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

UIScrollBar コンポーネントを制御する UIScrollBar クラスには scrollPosition というプロパティがあります。 スライダの位置を管理しているもので、位置を取得するだけでなく、値を書き換えてスクロール対象の任意の部分を表示することもできます。 スクロール対象がテキストフィールドで縦のスクロールバーとして利用している場合、scrollPosition プロパティにはテキストフィールドの行が入っており、値の範囲は 1 ~テキストフィールドの maxscroll プロパティの値です。 (ヘルプには 0 ~ maxscroll - 1 とありますが、これはどうも誤りのようです) 正攻法で行くならば、scrollPosition の値を監視して maxscroll に達した時にボタンを表示する、というスクリプトでご希望の動作になるかと思います。 ・・・しかし、よく考えてみますと、スライダの位置の単位がテキストフィールドの行であるのならば、スライダの位置とは要するにテキストフィールドの scroll プロパティと同じ意味です。 つまり、何もスクロールバーにこだわらず「テキストフィールドの scroll プロパティを監視して maxscroll に達した時にボタンを表示する」と考えてもいいわけです。 テキストフィールドの scroll プロパティを監視するには、このプロパティが変更された時に呼び出される TextField クラスの onScroller イベントハンドラが便利です。 今回は onScroller イベントを使った例をご紹介します。 -------------------------------------------------------------------- 仮に、ステージにボタンシンボルのインスタンス” btn ”があるとします。 ステージにスクリプトでテキストフィールドを作り、スクロールバーのスライダでテキストの末尾を表示、つまりスライダが下端にある時に btn を表示、それ以外の時は非表示にするものとします。 スクリプトにしますと、大体、次のようになります。 このスクリプトはメインのタイムラインのフレームに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //ボタンを非表示にしておく  btn._visible = false;  //空のテキストフィールド(幅200×高さ160)をX=100・Y=100の位置に作成  this.createTextField( "disp" , 0 , 100 , 100 , 200 , 160 );  //テキストフィールドの設定  //複数行・折り返しあり・境界線あり  disp.multiline = true;  disp.wordWrap = true;  disp.border = true;  //ダミーのテキストを表示  //(このテキストは作品に合わせて変更してください)  disp.text = "・・・・・・・・・・・・・・・\n\n";  disp.text += "あいうえお\n";  disp.text += "カキクケコ\n";  disp.text += "1234567890\n";  disp.text += "ABCDEFG\n\n";  disp.text += "1234567890\n";  disp.text += "hijklmn\n\n";  disp.text += "○×△□\n";  disp.text += "!!!!!!\n"  disp.text += "???\n\n";  disp.text += "・・・・・・・・・・・・・・・";  //テキストフィールドの文字サイズを20ptに設定  format = new TextFormat();  format.size = 20;  disp.setTextFormat( format );  //スクロールバーを挿入し、テキストフィールドに関連付ける  this.attachMovie( "UIScrollBar" , "sc_bar" , 1 , { _x : 300 , _y : 100 , _height : 160 } );  sc_bar.setScrollTarget( disp );  //テキストフィールドのscrollプロパティを監視  disp.onScroller = function()  {   //末尾を表示している時、ボタンを表示   if( this.scroll >= this.maxscroll )   {    btn._visible = true;   }   //それ以外の時はボタンを非表示にする   else   {    btn._visible = false;   }  }; ************************** スクリプトで作ったテキストフィールドに UIScrollBar コンポーネントを適用する方法と注意点は、以前 No.2287838 ( http://okwave.jp/kotaeru.php3?q=2287838 )でご紹介しました通りです。 HTML をなしにし、処理の順番が少々違っていますけれど、処理の内容は同じです。 今回のポイントは、テキストフィールドの scroll プロパティを監視する onScroller というイベントハンドラです。 ムービークリップの onEnterFrame などと同じ要領で、予め処理を定義しておくとイベントが起きた時に自動的に処理が行われるようになります。 このイベントは、テキストフィールドの scroll プロパティが更新された時に発生します。 UIScrollBar コンポーネントでは、スライダを動かすと、スライダの位置に応じた行に移動するために関連付けてあるテキストフィールドの scroll プロパティを書き換えます。 つまり、スライダを動かしてスクロールさせた時も onScroller イベントハンドラで定義した関数は呼び出されます。 イベント発生時にすることは、  ・ scroll プロパティを見る  ・下端( = maxscroll )に達している時にボタンを表示、それ以外の時は非表示にする の、2点です。 これをそのまま関数にしています。 ボタンが他の階層内にある場合はターゲットパスの誤りにご注意ください。 ************************** 今回は扱いませんでしたが、スクロールバーのスライダの位置を管理している UIScrollBar クラスの scrollPosition プロパティを使っても同じ動作を実現できます。 コンポーネント特有のイベントを利用するには、on アクションでオブジェクトアクションとしてイベント処理を定義する方法と、リスナーオブジェクトというイベントを処理するオブジェクトを登録する方法の2通りがあります。 ただし、今回はスクロールバーを attachMovie で動的に挿入するため、on アクションは使用できません。 Flash のテクニカルノートに、リスナーオブジェクトを使った作例が載っています。 機会がありましたら研究してみてください。 コンポーネントによってイベントの名前などが違いますけれど、処理の流れ自体はどれも共通しています。  ・ Flash テクニカルノート:コンポーネント   http://www.adobe.com/jp/support/flash/technotes.html#components

banrigreatwall
質問者

お礼

お礼が遅れて、大変申し訳ありません。 DPEさんのおっしゃる通りにしたところ、見事実現する事ができました。 丁寧に解説してくださり、本当にありがとうございます。

関連するQ&A

  • 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
  • スクロールバーの設定

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

  • スクロールバーの自作の仕方

    テキストフィールドにスクロールバーをつけようと思いUIScrollBarを使用したのですが、 少々味気ないのでマウスホイール対応のスクロールバーを自作しようと思ってます。 しかしWEBで検索してもサンプルを配布しているサイトは多数あったのですが、一から解説しているサイトは発見できませんでした。 お手数ですが、スクロールバーの自作の仕方を教えて頂けないでしょうか。 FLASH製作の知識が全くといっていいほどないので、分かりやすく教えていただければ助かります。 ちなみに製作ソフトはFLASH8を使っています。 よろしくお願いします。

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

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

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

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

    • ベストアンサー
    • 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
  • スクロールバーの表示について

    お世話になります。 フォームやフレームにスクロールバーを表示させたいのですがScrollBarsプロパティやKeepScrollBarsVisibleプロパティに値を設定してもレールの部分だけ表示されてバーが表示されません。 というのもフォームやフレームの中にたくさんコントロールを置きたいのですがフォームやフレームの中に納まらないためスクロールバーでスクロールして納まらない部分も表示できるようにしたいと思っています。 フォームやフレームの中をスクロールするにはどうすればよいのでしょうか(テキストボックスではバーが表示されスクロールできます)。 よろしくお願い致します。

  • ★質問★スクロールバーを使わずに、スクロールをする

    皆様、お世話になります。 質問です。 ※i frame での使用です スクロールバーを使わずに、スクロールをする 技ってありますか? フレーム内は、他のサイトのページが閲覧できるように なってますが、超縦長なのでスクロールバーが出ます。 単にスクロールバーを「消す処理」の設定すると、 フレーム内は見れなくなりますし。。。 付け足すと、スクロールバーを使わない代わりに、 何か変わりになるボタン?(GUI) を割り当てて、それをクリックする事で 上下させたいのですが。。 ※中身の内容を自動で上下させるのではありません ↑マーキー見たいなものではないです。 あくまで、オンマウス的な技。 FLASH以外でお願いします。 説明が下手で恐縮です。。。。orz 何卒宜しくお願いします。 助けてください。。。

    • ベストアンサー
    • HTML
  • スクロールバーの非表示+繰り返し

    現在、FLASHで作品を作成していて、ActionScriptを勉強中なのですが、あるところで詰まってしまい質問させていただくことになりました。 その詰まっているところとは、『繰り返し文を用いて、スクロールバーを非表示にする』ということです。 同じようなページを多数作成していて、その中でテキストを表示させる画面があるのですが、そのテキストの長さがまちまちなので、テキストの長さを判別してスクロールの必要がなければ、スクロールバーを非表示にする。ということです。 そしてデータが多量ゆえ効率化しようとおもい、繰り返し文を用いて効率化しようとしたのですが、なかなかうまくいかず困っています。 現状のスクリプトでは、1ページ目はきちんとスクロールバーの表示・非表示がされるのですが、2ページ目以降に遷移すると非表示になるはずのスクロールバーが真っ白の状態で表示されてしまっているのです。 ちなみに使用しているスクロールバーは、コーポネントの中にある「UIScrollbar」です。 なお、ActionScriptは以下のようになっております。 //sub_bar=スクロールバー(sub2_barも同義) //sub=テキスト(sub2も同義) for (i=1; i<=10; i++) { //スクロールの必要がないならスクロールバーを非表示 this["sub_bar"+i]._visible = (this["sub"+i].maxscroll<=1) ? false : true; this["sub2_bar"+i]._visible = (this["sub2"+i].maxscroll<=1) ? false : true; } テキストのインスタンス名は"sub1,sub2,sub3…"といったように、 スクロールバーのインスタンス名は"sub_bar1,sub_bar2,sub_bar3…"といったようになっております。 質問でよくわからない点、足りない点があれば、補足いたしますのでおっしゃってください。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • Flash スクロールバー表示

    環境 Win OS XP   Macromedia Flash MX Professional 2004 外部テキストを読み込んでいるんですが ◆スクロールパーツがうまく表示されない …スクロールバーの部分が上下に長い ◆スクロールの反応が悪い …マウスでスクロールできず上下の矢印を押さないと移動できない ◆*.flaだと上下の矢印も表示されない白い棒のまま。 ◆外部テキスト(HTML)が全部スクロールで表示しきれない …もっと文章があるんですがスクロールできるのは数行止まりで それ以上、下へ行かないんです。 サイトや本など色々見たのですが確証あるものがなくご指導いただきたく思いますので よろしくお願いします。 アクション部分は onClipEvent (load) { this.loadVariables("txt.html"); } onClipEvent (data) { scrollbar.setScrollTarget(txt.html); } 初心者なモノで説明不足かもしれませんが どうぞよろしくおねがいします。

    • ベストアンサー
    • Flash

専門家に質問してみよう