「ポップアップメニューを手軽に扱う」の版間の差分

Tips、おまけの追加
140行目: 140行目:
'''serarator''' : 省略可能。セパレーターを挿入する条件。後述。
'''serarator''' : 省略可能。セパレーターを挿入する条件。後述。


'''esc''' : 省略可能。ESCキーを押した時の挙動。後述。
'''esc''' : 省略可能。ESCキーでメニューを閉じた時の挙動。後述。


== 使い方 ==
== 使い方 ==
245行目: 245行目:
</source>
</source>


第4引数でメニュー表示時にESCキーを押した時の挙動を変更できます。デフォルトではそこでスクリプトの実行が終了します。
第4引数でメニューをESCキーで閉じた時の挙動を変更できます。デフォルトではそこでスクリプトの実行が終了します。
関数オブジェクトを指定するとその関数を実行し、それ以外の値(undefinedを除く)の場合はその値を返します。
関数オブジェクトを指定するとその関数を実行し、それ以外の値(undefinedを除く)の場合はその値を返します。


264行目: 264行目:


といった再帰定義で無限ループになるのを防ぐためです。
といった再帰定義で無限ループになるのを防ぐためです。
=== Tips ===
<source lang="javascript">
menu["Now?"] = new Date();
</source>
こう書くとマクロを実行したとき(正確にはオブジェクトに代入した瞬間)の時間になります。これをメニューが選択された時の時間にするときは
<source lang="javascript">
menu["Now!!"] = function(){return new Date();};
</source>
こうやってfunctionでくるんでください。
== おまけ ==
サブメニューとかいいから簡単に使いたいという人向け。
<source lang="javascript">
function ShowMenuMini(list){
    var pos = 0;
    var ret = 0;
    var menu = CreatePopupMenu();
    for(i = 0;i < list.length;i++){
        //if(list[i].toString().indexOf("----") !== -1){menu.Add("hoge",999,meMenuSeparator);continue;}
        menu.Add(list[i].toString(),i + 1);
    }
    ret = menu.Track(pos);
    if(ret === 0){
        Quit(); //ESCキーを押した時の挙動
    }
    else{
        return ret - 1;
    }
}
</source>
<source lang="javascript">
function ShowMenuMini(
    list : Array
)
</source>
引数には配列を指定する。選択された要素のインデックスが返り値になる。
=== 使い方 ===
<source lang="javascript">
var menu = ["Morning","Afternoon","Evening"];
var value = ["あんぱん","ジャムパン","カレーパン"];
Document.Write(value[ShowMenuMini(menu) ] );
</source>
なお、セパレーターを挿入する機能はオフにしてあります。セパレータを使いたい場合は8行目のコメントアウトを外してください。その場合はメニュの表示と返り値がずれることに注意してください。
<source lang="javascript">
var menu = ["Morning","Afternoon","----","Evening"];
var value = ["あんぱん","ジャムパン","ここが選ばれることはない","カレーパン"];
Document.Write(value[ShowMemuMini(menu) ] );
</source>
スポンサーリンク