質問させてください。
createtextfieldでつくったテキストフィールドにコンポーネントを使って、スクロールバーを適用させています。
そのスクロールバーのスライダが一番下まで来たときに、ボタンを表示させたいのです。
しかし、その条件設定がどうしたらいいのかわからず、なやんでいます。
自作のスクロールボタンだと、ボタンを押したときにmaxscrollなら、という条件設定で実現できたのですが、コンポーネントの場合は、どういう風にすればいいのかわからず、困っています。
もしよろしかったら、教えていただければ、幸いです。
私が使っているのは、
WIN XP
FLASH MX 2004
です。
よろしくお願いします。
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. …
お礼が遅れて、大変申し訳ありません。
DPEさんのおっしゃる通りにしたところ、見事実現する事ができました。
丁寧に解説してくださり、本当にありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- gooのスマホ スマホF-51Bに緊急時情報画面でロックが掛かって解除できません。 3 2023/06/18 23:05
- マウス・キーボード Bluetoothのクイックペアリングについて 8 2023/03/25 16:50
- gooブログ 記事の下にスクロールバーが表示される 2 2022/08/19 20:42
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- その他(プログラミング・Web制作) マウスオーバー→ホイール回転でスクロールできない 2 2022/10/31 10:06
- Android(アンドロイド) AQUOS sense6sの物理ボタン(アシスタントキー)に再生・一時停止を割り当てる方法 2 2022/08/09 00:37
- Visual Basic(VBA) ExcelのVBAを使い、複数シートの同一箇所を、同一条件にて一括でソルバーを回す方法について 1 2022/04/23 11:49
- iCloud iPhone端末変更時のLINE引継ぎ 4 2023/07/09 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスの中身をリセ...
-
別のアプリケーションのテキス...
-
漢字入力した値のカタカナ変換...
-
コモンダイアログのshowopenに...
-
RPG(AS400)の本、サイトってあ...
-
DirectXでの読み込みについて
-
値が無いと次へボタンを押して...
-
エディットボックス内での追記
-
空白で入力フォームのボタンを...
-
DelphiのRichEditでカーソル位...
-
VB6.0 でメニューを作りたいん...
-
PythonのTkinterイベントについて
-
変数に256文字以上のテキストを...
-
スクロールバーが一番したまで...
-
'2465'指定した式で参照してい...
-
FLASH8にてテキストエリア内の...
-
createTextFieldで作ったテキス...
-
VBAからPDFのテキストフィールド
-
ExcelでVBAを利用してオートシ...
-
FLASH上で日数カウントダウン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
テキストボックスにセルの値を...
-
RPG(AS400)の本、サイトってあ...
-
変数に256文字以上のテキストを...
-
ホームぺージ制作で間違って重...
-
VB6.0 でメニューを作りたいん...
-
改行含むテキストの表示の仕方
-
VB.NET2005 DataGridViewでレコ...
-
pdfのテキスト全文コピー、テキ...
-
コモンダイアログのshowopenに...
-
VBAでホームページからコピーし...
-
テキストエリア内の文字列にリ...
-
VBAからPDFのテキストフィールド
-
VS2008 C# ボタンのテキストを...
-
'2465'指定した式で参照してい...
-
VB.NET メッセージボックスの表...
-
チェックボックスのテキストを...
-
VBSでMid関数を使ったらエラー...
-
ドラッグ&ドロップからの取得
おすすめ情報