- ベストアンサー
UIコンポーネントのボタンの違いと使い方
- UIコンポーネントのボタンの使い方についての違いがわかりません。質問者はMX2004を使用しているのですが、本で紹介されているClickHandlerというプロパティが見つかりません。また、myFunctionという要素も必要とされていますが、具体的な使い方がわかりません。
- 質問者は日高功雄さんの本でUIコンポーネントのボタンの使い方を学んでいますが、MX2004とMXのバージョンの違いについて疑問があります。本にはClickHandlerというプロパティの使用が紹介されていますが、MX2004では見つからないようです。また、myFunctionという要素の使い方についてもわからない状況です。
- UIコンポーネントのボタンの使い方についての質問です。日高功雄さんの本で学んでいるのですが、MXとMX2004のバージョンの違いについて詳しく知りたいです。特に、ClickHandlerというプロパティとmyFunctionという要素の使い方がわかりません。お教えいただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
MX と MX 2004 とでは同名のコンポーネントもあり、機能や使い方は似ているところが少しはありますが、制御するためのスクリプトはかなり変更されていて、全くの別物です。 MX 2004 からは ActionScript 2.0 という、新しいバージョンのスクリプトが搭載されました。 MX 2004 のコンポーネント(を制御するクラス)は ActionScript 2.0 で作られており、また、全コンポーネントに共通して使えるクラスを導入するなど、設計理念も大幅に変わっています。 たとえ MX と同名のコンポーネントであっても、スクリプトに互換性はありません。 大きな変更点の1つが、ご質問文にある ClickHandler (コンポーネントによっては ChangeHandler )の部分です。 MX のコンポーネントには、コンポーネント特有のイベントがありません。 イベントを処理する代わりとして、コンポーネントに変化が加わった時に自動で呼び出される関数を、1つだけ登録できる機能が提供されています。 スクリプトでは set***Handler というメソッドを使いますが、関数名を指定するパラメータがコンポーネントパラメータとして用意されていて、ムービーの編集画面からでも簡単に設定できます。 一方、MX 2004 のコンポーネントにはイベントを処理する専門のクラスが組み込まれていて、”イベントが発生した時に何かをする”という形で制御できるようになりました。 イベントの処理は普通のムービークリップやボタンと同じように、on アクションでオブジェクトアクションとして書くこともできます。 例えば、Button コンポーネントでは click というイベントが使えますが、 on(click) { ・・・ } このようにして、イベント発生時の処理をインスタンスに直接設定できます。 また、on*** = function ・・・という形式を使うとムービークリップやボタンへの指示をフレームアクションとして書けるのと同様に、コンポーネント独自のイベント処理も、on アクションによらずフレームアクションとして設定できる書き方もあります。 ”リスナーオブジェクト”という、インスタンスの代理でイベントの情報を受け取って処理するオブジェクトを使う方法で、リスナーを複数登録しておくと、イベント発生時に複数の異なる処理を同時に呼び出せる利点があります。 これらの仕組みが整備されたことから、MX にあった set***Handler メソッドや ***Handler パラメータは不要になり、MX 2004 のコンポーネントでは廃止されています。 ----------------------------------------------------------- MX 2004 のコンポーネントで、リスナーオブジェクトを使ったイベント処理は 1) リスナーオブジェクトとなる Object 型の変数を作る 2) リスナーにコンポーネントのイベントと同名の要素を作り、呼び出す関数への参照を代入する 3) リスナーオブジェクトを登録 という流れになります。 仮に、ステージに Button コンポーネントのインスタンス” comp_btn ”があるとしますと、リスナーオブジェクトを使ったイベント処理の例は次のようになります。 このスクリプトは、メインのタイムラインに設定してください。 (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください) //リスナー用のオブジェクトを作成 obj = new Object(); /*イベント発生時に呼ぶ関数*/ function Click_Act( event_info:Object ) { //イベントとコンポーネントに関する様々な情報を出力 trace( "イベント名 = " + event_info.type ); trace( "インスタンスのパス = " + event_info.target ); trace( "ラベル = " + event_info.target.label ); trace( "ラベルの位置 = " + event_info.target.labelPlacement ); trace( "アイコン = " + event_info.target.icon ); } //クリック時の処理とリスナーを登録 obj.click = Click_Act; comp_btn.addEventListener( "click" , obj ); 上記のスクリプトでは、リスナーオブジェクトとして” obj ”という Object 型の変数を作っています。 コンポーネントがクリックされた時に呼ぶ” Click_Act ”関数を予め定義し、obj.click にこの参照を代入していますが、関数名が不要なら obj.click = function( event_info:Object ) { ・・・ }; と、匿名の関数で定義することもできます。 イベントが発生した時に呼び出される関数は、イベントに関する情報を引数として受け取ることができます。 この引数は、type と target という2つの要素を持つ Object 型の変数です。type にはイベントの名前が、target にはイベントが発生したインスタンスの参照が入っています。 上記の Click_Act 関数では、渡されてきた情報を参照して、イベントの種類とインスタンスに関するプロパティを trace アクションで表示しています。 ----------------------------------------------------------- MX のコンポーネントには、***Handler というパラメータがありました。 このパラメータは関数名を文字列で管理しているものなので、イベント発生時に呼ぶ関数の名前を”文字列”として取得できます。 しかし、MX 2004 のコンポーネントでリスナーオブジェクトを使う方法では、関数は文字列ではなく”参照”で登録しますし、内部でも参照として管理されています。 (ただの文字列が入っている変数は、変数の値を参照に変換してからでないと関数を呼び出せませんが、最初から参照が入っている変数は直接関数を呼び出すことができます) 一旦登録した関数名や関数の参照は、スクリプトでは取得できないようです。 Flash では普段は参照する意味も必要もないことから、外部からはいじられないように隠されているのだと思います。 さて、ご質問文にあるタグは、察するに ColdFusion の記述だと思いますが。 関数 myFunction 内では、Button コンポーネントをクリックした時に呼び出される関数を、単に呼び出せればいいだけでしょうか? 特定のインスタンスに限定するならば、ClickHandler の値に相当するものは、先の例では click イベント発生時の処理として登録する関数の名前である、” Click_Act ”ということになります。 匿名の関数で登録すると外部からは参照できませんので、名前を持つ関数として定義してください。 先述の通り、MX 2004 のコンポーネントではイベント発生時に呼ばれる関数名などは隠匿されてしまい、一般的には外部からは取得できないと思われます。 (まあ、デバッガで内部変数を覗くという裏ワザはありますが ^^;) MX 2004 の Button コンポーネントにこだわる必要がなければ、 ● Flash Exchange で MX に付いていたコンポーネントのセットを入手し、そちらを使う(ただし、英語版です) ・Flash Exchange:Flash MX Components for Flash MX 2004, V1.5.0 http://www.macromedia.com/cfusion/exchange/index.cfm?view=sn110#loc=en_us&view=sn111&viewName=Flash%20Extension&authorid=60639501&page=0&scrollPos=0&subcatid=0&snid=sn111&itemnumber=2&extid=1009423&catid=0 ↑ Exchange に登録されているアイテムの増減により、ページが移動するかもしれません。見付からない時は、Exchange の” User Interface ”カテゴリーリストから探してください。 ・Flash Exchange http://www.macromedia.com/cfusion/exchange/index.cfm?view=sn110#loc=en_us&view=sn110&viewName=Flash%20Exchange&avm=1 ● MX と似たような設計のコンポーネントを自作する といった方法をとれば、その解説書と同じことができると思います。 コンポーネントの自作は難しいように見えますが、単純なボタンとしてのコンポーネントなら、実はそれほど難しくはありません。 要するに、ムービークリップの onRelease イベントハンドラで呼ぶ関数の名前を、文字列のパラメータとして受け取るコンポーネントにすればいいのです。 ムービークリップのタイムラインには、受け取ったパラメータを参照に変換して onRelease に登録するというスクリプトを書いておくだけです。 MX のコンポーネントと同じく、onRelease で呼ぶ関数の名前を変数として持つので、ColdFusion ではこの変数を参照して関数名を知ることができます。 その myFunction 関数内でどのような処理が行われているのかと、MX 2004 のコンポーネントの扱い方や特性を合わせて考えると、方法はいくらでも見えてくると思います。 コンポーネントは解説書やサイトが乏しくて難しいですが、ヘルプを熟読して研究してみてください。 ColdFusion はよく分かりませんけれど、Flash の範囲内で何かお役に立てることがあれば、補足の回答はいたします。 長くなってすみませんでした。
その他の回答 (1)
- suzuko
- ベストアンサー率38% (1112/2922)
MXを使用していますが、プロパティのところにClickHandlerと言うものはありません。(TT) 下の索引にもリファレンスにも・・・ もう少し情報、頂けますか?
補足
ありがとうございます。 プロパティではなくて、パラメーターのところです。 MXではあり、MX2004ではないようです。 お願いいたします。