[AS3.0]CS4 Flash上でFlexのAlertポップアップを実現する
Flashの環境上にはAlertがない。
FlexではAlert.show(“message”);とかで簡単にできちゃうけど、Flashではそれができないのだ。
そこでなんとか方法はないかと探ったら方法と、また、問題点があったのでめもっとく。
[方法]Examples: AlertManager for Flash CS3から適当にどれかFLAファイルひろってくる。
そのあと、FLAファイルにあるAlertManagerと、コンポーネントのButtonを自分とこのライブラリにコピー
次に
import com.yahoo.astra.fl.managers.AlertManager;
import fl.data.DataProvider;
import fl.events.ComponentEvent;
を、importして、
AlertManager.createAlert(this, “This is an alert box.”);
を実行するだけ。
[問題点]
ASファイルを別に作り、ドキュメントクラスで書いてるとうまく動かない
[解決方法]
AlertManager.createAlert(this, “This is an alert box.”);
のthisの部分をrootに変える。
[詳細]
参考サイト
ASTRA AlertManager
FlashでのAlertポップアップの答えがここにあった!
サンプルをみると、、、
おー!
FlexのAlertのようだ!
Using AlertManagerをみてみると、
1.importと初期設定
import com.yahoo.astra.fl.managers.AlertManager;
import fl.data.DataProvider;
import fl.events.ComponentEvent;
stage.align = StageAlign.TOP_LEFT;
をやってくれとのこと。
しかし、ここで問題。
私の環境ではstage.align = StageAlign.TOP_LEFT;をやってもえらーになってしまった。
しかたないのでここははずしたが・・・
あれ、、はずしてもうごいてるじゃんw
ということで、なくてもよくわからんけど動きます。
2.Alertの表示
以下を書き込むだけでアラートができる。
AlertManager.createAlert(this, “表示したいメッセージ”);
なんと簡単なんだ!!
3.引数の設定
もっと詳細に設定したい場合はこちら。
AlertManager.createAlert(this, “表示したいメッセージ”, “アラートタイトル”, buttons, alertClickHandler, iconClass, true);
・1個目の引数
みたまんまthisをいれている。
だがしかし、これがトラップをもっている。
ASファイルを別につくりドキュメントクラスとして書いて、thisで実行するとこんなエラーがでた。
TypeError: Error #1034: 強制型変換に失敗しました。global@31f3f0f9 を flash.display.DisplayObject に変換できません。
at MethodInfo-136()
そのため、代わりにrootをいれてあげたらできた。
・2個目の引数
メッセージ本文です。
String型でいれてあげましょう。
・3個目の引数
メッセージのタイトルです。
これもString。
・4個目の引数
ボタンの設定です。
Arrayをいれます。
Arrayの個数によってボタンが増えていきます。
たとえば
var buttons:Array = new Array( “button1”, “button2” );
と、宣言しこのbuttonsを引数に指定すれば、
button1とbutton2のボタンが生成されます。
・5個目の引数
ボタンが押されたときに呼び出されるイベントハンドラです。
適当に関数を指定しときましょう
・6個目の引数
iconClassってことだが、これは表示するポップアップを
“” (普通のアラート)
“dialogIcon”
“warningIcon”
“confirmationIcon”
4つ選択できる。
すきなものをString型でいれてあげてください。
・7個目の引数
よくわからん。
とりあえずtrue。
falseにするとなんかエラーでるのでとりあえずtrueにしとけばいいかと。
とりあえずASファイルの記述はこんなかんじ。
1234567891011121314151617181920212223 package{import flash.display.*;import flash.events.*;import com.yahoo.astra.fl.managers.AlertManager;import fl.data.DataProvider;public class test extends Sprite {public function test() {//add event listener to the buttonshowAlertButton.addEventListener(MouseEvent.CLICK, ShowAlerts);//event handler to trigger the alertfunction ShowAlerts(evnt:MouseEvent):void{var buttons:Array = new Array( "button1", "button2" );AlertManager.createAlert(root, "this is Alert Message\n are you ok?", "Title", buttons, _clickAlert, "", true );}function _clickAlert (){showAlertButton.label = "ok";}}}}
サンプルとソースはこちら
アラートサンプル
ソース
11/20追記
ライブラリに追加する際に、AlertManagerだけでなく、コンポーネントからButtonも追加しないといけないようなので注意です。
これがないとエラーでて、大変だったので注意。
アラートボックス