<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://www.haijin-boys.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=126.23.41.25</id>
	<title>MeryWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://www.haijin-boys.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=126.23.41.25"/>
	<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/126.23.41.25"/>
	<updated>2026-11-06T04:31:19Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=575</id>
		<title>ポップアップメニューを手軽に扱う</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=575"/>
		<updated>2012-12-07T06:34:44Z</updated>

		<summary type="html">&lt;p&gt;126.23.41.25: /* おまけ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;マクロではないのですが、Meryのポップアップメニューを手軽に扱える関数を書いてみました。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(menu_obj, position, separator, esc){&lt;br /&gt;
    var MAX_NEST = 5;//ネストの最大深度&lt;br /&gt;
    &lt;br /&gt;
    var id_counter = 1;&lt;br /&gt;
    var item_list = [];&lt;br /&gt;
    var popup&lt;br /&gt;
    var selected_id;&lt;br /&gt;
    &lt;br /&gt;
    //メニューをESCキーで閉じた時の挙動を登録&lt;br /&gt;
    if(esc === undefined){&lt;br /&gt;
        item_list[0] = function(){Quit();};&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        item_list[0] = esc;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //メニュー位置の初期化&lt;br /&gt;
    if(position !== mePosMouse) {&lt;br /&gt;
        position = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //セパレーターを挿入する条件&lt;br /&gt;
    var isSeparator = function(str){&lt;br /&gt;
        if(separator === false){&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        else if(typeof separator === &amp;quot;string&amp;quot;){&lt;br /&gt;
            return (str.indexOf(separator) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return (str.indexOf(&amp;quot;----&amp;quot;) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ObjectOrArray = function(target){&lt;br /&gt;
        if(target){&lt;br /&gt;
            switch(Object.prototype.toString.call(target) ){&lt;br /&gt;
                case &amp;quot;[object Object]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Object&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;[object Array]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Array&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    return &amp;quot;Other&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return &amp;quot;Other&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ArrayToPopup = function(list){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var i =0; i &amp;lt; list.length; i++){&lt;br /&gt;
            if(isSeparator(list[i].toString() ) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                menu.Add(list[i].toString(), i + 1);&lt;br /&gt;
            }&lt;br /&gt;
            item_list[i + 1] = list[i];&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var  ObjectToPopup = function(obj, nest){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var key in obj){&lt;br /&gt;
            if(isSeparator(key) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                if(ObjectOrArray(obj[key] ) !== &amp;quot;Object&amp;quot;){&lt;br /&gt;
                    menu.Add(key, id_counter);&lt;br /&gt;
                    item_list[id_counter] = obj[key];&lt;br /&gt;
                    id_counter++;&lt;br /&gt;
                }&lt;br /&gt;
                else{&lt;br /&gt;
                    if(nest &amp;lt; MAX_NEST){&lt;br /&gt;
                        menu.AddPopup(key, ObjectToPopup(obj[key], nest + 1) );&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    //ここまで変数、関数の定義&lt;br /&gt;
    //関数の本体はここから&lt;br /&gt;
    switch(ObjectOrArray(menu_obj) ){&lt;br /&gt;
        case &amp;quot;Object&amp;quot;:&lt;br /&gt;
            popup =  ObjectToPopup(menu_obj, 0);&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;Array&amp;quot;:&lt;br /&gt;
            popup = ArrayToPopup(menu_obj);&lt;br /&gt;
            break;&lt;br /&gt;
        default://第1引数が配列かオブジェクト以外の時&lt;br /&gt;
            throw new Error(&amp;quot;第1引数には配列またはオブジェクトを指定してください&amp;quot;);&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    selected_id = popup.Track(position);&lt;br /&gt;
    &lt;br /&gt;
    if(typeof(item_list[selected_id] ) === &amp;quot;function&amp;quot;){&lt;br /&gt;
        return item_list[selected_id]();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return item_list[selected_id];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 簡単な使い方 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var x = ShowPopupMenu([&amp;quot;Spring&amp;quot;,&amp;quot;Summer&amp;quot;,&amp;quot;Autumn&amp;quot;,&amp;quot;Winter&amp;quot;] );&lt;br /&gt;
Document.Write(x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
選択された文字列が挿入されます。&lt;br /&gt;
&lt;br /&gt;
== リファレンス ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(&lt;br /&gt;
    menu_obj : Object | Array,&lt;br /&gt;
    position : int,&lt;br /&gt;
    separator : Boolean | String,&lt;br /&gt;
    esc : Anything&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;返り値&#039;&#039;&#039; : 選択されたメニューに対応する値。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;menu_obj&#039;&#039;&#039; : 必ず指定する。メニューを定義したオブジェクトまたは配列。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;position&#039;&#039;&#039; : 省略可能。メニューを表示する位置。mePosMouseを指定するとカーソル位置に表示される。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;serarator&#039;&#039;&#039; : 省略可能。セパレーターを挿入する条件。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;esc&#039;&#039;&#039; : 省略可能。ESCキーでメニューを閉じた時の挙動。後述。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== 配列を指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
第1引数に配列を指定するとその配列内の要素をメニューに表示します。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var list = [&amp;quot;メニュー1&amp;quot;,&amp;quot;メニュー2&amp;quot;,&amp;quot;メニュー3&amp;quot;,&amp;quot;メニュー4&amp;quot;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
SowPopupMenu関数の返り値は選択された要素になります。&lt;br /&gt;
&lt;br /&gt;
=== オブジェクトを指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトのキーがメニューに表示ます。キーに対応する値が返り値になります。（値が関数オブジェクトの時は後述。）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
こうするとサブメニューを作れます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
連続したハイフン4つ（----）をキー内に含む場合セパレータになります。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;----&amp;quot;] = 0; //何らかの値を入れておく。&lt;br /&gt;
&lt;br /&gt;
list = [&amp;quot;menu1&amp;quot;,&amp;quot;menu----2&amp;quot;,&amp;quot;menu3&amp;quot;] //配列でも可能。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 使用例 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;----&amp;quot;] = 0;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー2&amp;quot;] = &amp;quot;Submenu2&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
このように指定することも可能です。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {&lt;br /&gt;
    &amp;quot;メニュー1&amp;quot; : &amp;quot;メニュー1&amp;quot;,&lt;br /&gt;
    &amp;quot;メニュー2&amp;quot; : 2,&lt;br /&gt;
    &amp;quot;グループ1&amp;quot; : {&lt;br /&gt;
        &amp;quot;サブメニュー1&amp;quot; : &amp;quot;SubMenu1&amp;quot;,&lt;br /&gt;
        &amp;quot;----&amp;quot; : 0,&lt;br /&gt;
        &amp;quot;サブメニュー2&amp;quot; : &amp;quot;SubMenu2&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 返り値 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトでメニューを定義するする場合、値が関数オブジェクトかそれ以外かで返り値が変わります。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行して、その関数の返り値がShowPopupMenu関数の返り値になります。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function func1(){&lt;br /&gt;
    Document.Write(&amp;quot;func1&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;func1&amp;quot;] = func1; // func1() 、ではない。（括弧は付けない）&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
「func1」がエディターのキャレット位置に挿入され、0が返ります。&lt;br /&gt;
&lt;br /&gt;
もちろんfunctionリテラルで直接書いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;func2&amp;quot;] = function(){Alert(&amp;quot;func2&amp;quot;);};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
関数オブジェクト以外を値とした場合はその値がそのまま返ります。&lt;br /&gt;
&lt;br /&gt;
=== その他の引数の説明 ===&lt;br /&gt;
&lt;br /&gt;
第2引数にmePosMouseを指定するとマウスカーソルの位置にメニューが表示されます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu, mePosMouse)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
それ以外の値の時はキャレット位置に表示します。&lt;br /&gt;
&lt;br /&gt;
第3引数にfalseを指定するとセパレーターを挿入しなくなります。また文字列を指定するとその文字列が含まれるメニューをセパレータにします。それ以外の値は無視します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,false) // セパレーターを挿入しない&lt;br /&gt;
ShowPopupMenu(menu,0,&amp;quot;ああああ&amp;quot;) // 「ああああ」が含まれるメニューをセパレータにします。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
第4引数でメニューをESCキーで閉じた時の挙動を変更できます。デフォルトではそこでスクリプトの実行が終了します。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行し、それ以外の値（undefinedを除く）の場合はその値を返します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,0,-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上の例ではESCキーを押してもスクリプトは終了せず、関数は-1を返します。&lt;br /&gt;
&lt;br /&gt;
=== その他 ===&lt;br /&gt;
&lt;br /&gt;
デフォルトではメニューの最大階層は5（2行目のMAX_NESTの値を書き換えることで変更可能）になっています。これは&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = 1;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = menu;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
といった再帰定義で無限ループになるのを防ぐためです。&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;Now?&amp;quot;] = new Date();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
こう書くとマクロを実行したとき（正確にはオブジェクトに代入した瞬間）の時間になります。これをメニューが選択された時の時間にするときは&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;Now!!&amp;quot;] = function(){return new Date();};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
こうやってfunctionでくるんでください。&lt;br /&gt;
&lt;br /&gt;
== おまけ ==&lt;br /&gt;
サブメニューとかいいから簡単に使いたいという人向け。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowMenuMini(list){&lt;br /&gt;
    var pos = 0;&lt;br /&gt;
&lt;br /&gt;
    var ret = 0;&lt;br /&gt;
    var menu = CreatePopupMenu();&lt;br /&gt;
&lt;br /&gt;
    for(i = 0;i &amp;lt; list.length;i++){&lt;br /&gt;
        //if(list[i].toString().indexOf(&amp;quot;----&amp;quot;) !== -1){menu.Add(&amp;quot;hoge&amp;quot;,999,meMenuSeparator);continue;}&lt;br /&gt;
        menu.Add(list[i].toString(),i + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ret = menu.Track(pos);&lt;br /&gt;
&lt;br /&gt;
    if(ret === 0){&lt;br /&gt;
        Quit(); //ESCキーを押した時の挙動&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return ret - 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== リファレンス ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowMenuMini(&lt;br /&gt;
    list : Array&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引数には配列を指定する。選択された要素のインデックスが返り値になる。&lt;br /&gt;
&lt;br /&gt;
=== 使い方 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = [&amp;quot;Morning&amp;quot;,&amp;quot;Afternoon&amp;quot;,&amp;quot;Evening&amp;quot;];&lt;br /&gt;
var value = [&amp;quot;あんぱん&amp;quot;,&amp;quot;ジャムパン&amp;quot;,&amp;quot;カレーパン&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
Document.Write(value[ShowMenuMini(menu) ] );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
なお、セパレーターを挿入する機能はオフにしてあります。セパレータを使いたい場合は8行目のコメントアウトを外してください。その場合はメニュの表示と返り値がずれることに注意してください。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = [&amp;quot;Morning&amp;quot;,&amp;quot;Afternoon&amp;quot;,&amp;quot;----&amp;quot;,&amp;quot;Evening&amp;quot;];&lt;br /&gt;
var value = [&amp;quot;あんぱん&amp;quot;,&amp;quot;ジャムパン&amp;quot;,&amp;quot;ここが選ばれることはない&amp;quot;,&amp;quot;カレーパン&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
Document.Write(value[ShowMemuMini(menu) ] );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>126.23.41.25</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=574</id>
		<title>ポップアップメニューを手軽に扱う</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=574"/>
		<updated>2012-12-07T06:32:25Z</updated>

		<summary type="html">&lt;p&gt;126.23.41.25: Tips、おまけの追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;マクロではないのですが、Meryのポップアップメニューを手軽に扱える関数を書いてみました。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(menu_obj, position, separator, esc){&lt;br /&gt;
    var MAX_NEST = 5;//ネストの最大深度&lt;br /&gt;
    &lt;br /&gt;
    var id_counter = 1;&lt;br /&gt;
    var item_list = [];&lt;br /&gt;
    var popup&lt;br /&gt;
    var selected_id;&lt;br /&gt;
    &lt;br /&gt;
    //メニューをESCキーで閉じた時の挙動を登録&lt;br /&gt;
    if(esc === undefined){&lt;br /&gt;
        item_list[0] = function(){Quit();};&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        item_list[0] = esc;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //メニュー位置の初期化&lt;br /&gt;
    if(position !== mePosMouse) {&lt;br /&gt;
        position = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //セパレーターを挿入する条件&lt;br /&gt;
    var isSeparator = function(str){&lt;br /&gt;
        if(separator === false){&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        else if(typeof separator === &amp;quot;string&amp;quot;){&lt;br /&gt;
            return (str.indexOf(separator) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return (str.indexOf(&amp;quot;----&amp;quot;) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ObjectOrArray = function(target){&lt;br /&gt;
        if(target){&lt;br /&gt;
            switch(Object.prototype.toString.call(target) ){&lt;br /&gt;
                case &amp;quot;[object Object]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Object&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;[object Array]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Array&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    return &amp;quot;Other&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return &amp;quot;Other&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ArrayToPopup = function(list){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var i =0; i &amp;lt; list.length; i++){&lt;br /&gt;
            if(isSeparator(list[i].toString() ) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                menu.Add(list[i].toString(), i + 1);&lt;br /&gt;
            }&lt;br /&gt;
            item_list[i + 1] = list[i];&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var  ObjectToPopup = function(obj, nest){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var key in obj){&lt;br /&gt;
            if(isSeparator(key) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                if(ObjectOrArray(obj[key] ) !== &amp;quot;Object&amp;quot;){&lt;br /&gt;
                    menu.Add(key, id_counter);&lt;br /&gt;
                    item_list[id_counter] = obj[key];&lt;br /&gt;
                    id_counter++;&lt;br /&gt;
                }&lt;br /&gt;
                else{&lt;br /&gt;
                    if(nest &amp;lt; MAX_NEST){&lt;br /&gt;
                        menu.AddPopup(key, ObjectToPopup(obj[key], nest + 1) );&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    //ここまで変数、関数の定義&lt;br /&gt;
    //関数の本体はここから&lt;br /&gt;
    switch(ObjectOrArray(menu_obj) ){&lt;br /&gt;
        case &amp;quot;Object&amp;quot;:&lt;br /&gt;
            popup =  ObjectToPopup(menu_obj, 0);&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;Array&amp;quot;:&lt;br /&gt;
            popup = ArrayToPopup(menu_obj);&lt;br /&gt;
            break;&lt;br /&gt;
        default://第1引数が配列かオブジェクト以外の時&lt;br /&gt;
            throw new Error(&amp;quot;第1引数には配列またはオブジェクトを指定してください&amp;quot;);&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    selected_id = popup.Track(position);&lt;br /&gt;
    &lt;br /&gt;
    if(typeof(item_list[selected_id] ) === &amp;quot;function&amp;quot;){&lt;br /&gt;
        return item_list[selected_id]();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return item_list[selected_id];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 簡単な使い方 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var x = ShowPopupMenu([&amp;quot;Spring&amp;quot;,&amp;quot;Summer&amp;quot;,&amp;quot;Autumn&amp;quot;,&amp;quot;Winter&amp;quot;] );&lt;br /&gt;
Document.Write(x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
選択された文字列が挿入されます。&lt;br /&gt;
&lt;br /&gt;
== リファレンス ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(&lt;br /&gt;
    menu_obj : Object | Array,&lt;br /&gt;
    position : int,&lt;br /&gt;
    separator : Boolean | String,&lt;br /&gt;
    esc : Anything&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;返り値&#039;&#039;&#039; : 選択されたメニューに対応する値。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;menu_obj&#039;&#039;&#039; : 必ず指定する。メニューを定義したオブジェクトまたは配列。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;position&#039;&#039;&#039; : 省略可能。メニューを表示する位置。mePosMouseを指定するとカーソル位置に表示される。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;serarator&#039;&#039;&#039; : 省略可能。セパレーターを挿入する条件。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;esc&#039;&#039;&#039; : 省略可能。ESCキーでメニューを閉じた時の挙動。後述。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== 配列を指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
第1引数に配列を指定するとその配列内の要素をメニューに表示します。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var list = [&amp;quot;メニュー1&amp;quot;,&amp;quot;メニュー2&amp;quot;,&amp;quot;メニュー3&amp;quot;,&amp;quot;メニュー4&amp;quot;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
SowPopupMenu関数の返り値は選択された要素になります。&lt;br /&gt;
&lt;br /&gt;
=== オブジェクトを指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトのキーがメニューに表示ます。キーに対応する値が返り値になります。（値が関数オブジェクトの時は後述。）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
こうするとサブメニューを作れます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
連続したハイフン4つ（----）をキー内に含む場合セパレータになります。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;----&amp;quot;] = 0; //何らかの値を入れておく。&lt;br /&gt;
&lt;br /&gt;
list = [&amp;quot;menu1&amp;quot;,&amp;quot;menu----2&amp;quot;,&amp;quot;menu3&amp;quot;] //配列でも可能。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 使用例 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;----&amp;quot;] = 0;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー2&amp;quot;] = &amp;quot;Submenu2&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
このように指定することも可能です。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {&lt;br /&gt;
    &amp;quot;メニュー1&amp;quot; : &amp;quot;メニュー1&amp;quot;,&lt;br /&gt;
    &amp;quot;メニュー2&amp;quot; : 2,&lt;br /&gt;
    &amp;quot;グループ1&amp;quot; : {&lt;br /&gt;
        &amp;quot;サブメニュー1&amp;quot; : &amp;quot;SubMenu1&amp;quot;,&lt;br /&gt;
        &amp;quot;----&amp;quot; : 0,&lt;br /&gt;
        &amp;quot;サブメニュー2&amp;quot; : &amp;quot;SubMenu2&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 返り値 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトでメニューを定義するする場合、値が関数オブジェクトかそれ以外かで返り値が変わります。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行して、その関数の返り値がShowPopupMenu関数の返り値になります。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function func1(){&lt;br /&gt;
    Document.Write(&amp;quot;func1&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;func1&amp;quot;] = func1; // func1() 、ではない。（括弧は付けない）&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
「func1」がエディターのキャレット位置に挿入され、0が返ります。&lt;br /&gt;
&lt;br /&gt;
もちろんfunctionリテラルで直接書いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;func2&amp;quot;] = function(){Alert(&amp;quot;func2&amp;quot;);};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
関数オブジェクト以外を値とした場合はその値がそのまま返ります。&lt;br /&gt;
&lt;br /&gt;
=== その他の引数の説明 ===&lt;br /&gt;
&lt;br /&gt;
第2引数にmePosMouseを指定するとマウスカーソルの位置にメニューが表示されます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu, mePosMouse)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
それ以外の値の時はキャレット位置に表示します。&lt;br /&gt;
&lt;br /&gt;
第3引数にfalseを指定するとセパレーターを挿入しなくなります。また文字列を指定するとその文字列が含まれるメニューをセパレータにします。それ以外の値は無視します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,false) // セパレーターを挿入しない&lt;br /&gt;
ShowPopupMenu(menu,0,&amp;quot;ああああ&amp;quot;) // 「ああああ」が含まれるメニューをセパレータにします。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
第4引数でメニューをESCキーで閉じた時の挙動を変更できます。デフォルトではそこでスクリプトの実行が終了します。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行し、それ以外の値（undefinedを除く）の場合はその値を返します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,0,-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上の例ではESCキーを押してもスクリプトは終了せず、関数は-1を返します。&lt;br /&gt;
&lt;br /&gt;
=== その他 ===&lt;br /&gt;
&lt;br /&gt;
デフォルトではメニューの最大階層は5（2行目のMAX_NESTの値を書き換えることで変更可能）になっています。これは&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = 1;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = menu;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
といった再帰定義で無限ループになるのを防ぐためです。&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;Now?&amp;quot;] = new Date();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
こう書くとマクロを実行したとき（正確にはオブジェクトに代入した瞬間）の時間になります。これをメニューが選択された時の時間にするときは&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;Now!!&amp;quot;] = function(){return new Date();};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
こうやってfunctionでくるんでください。&lt;br /&gt;
&lt;br /&gt;
== おまけ ==&lt;br /&gt;
サブメニューとかいいから簡単に使いたいという人向け。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowMenuMini(list){&lt;br /&gt;
    var pos = 0;&lt;br /&gt;
&lt;br /&gt;
    var ret = 0;&lt;br /&gt;
    var menu = CreatePopupMenu();&lt;br /&gt;
&lt;br /&gt;
    for(i = 0;i &amp;lt; list.length;i++){&lt;br /&gt;
        //if(list[i].toString().indexOf(&amp;quot;----&amp;quot;) !== -1){menu.Add(&amp;quot;hoge&amp;quot;,999,meMenuSeparator);continue;}&lt;br /&gt;
        menu.Add(list[i].toString(),i + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ret = menu.Track(pos);&lt;br /&gt;
&lt;br /&gt;
    if(ret === 0){&lt;br /&gt;
        Quit(); //ESCキーを押した時の挙動&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return ret - 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowMenuMini(&lt;br /&gt;
    list : Array&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引数には配列を指定する。選択された要素のインデックスが返り値になる。&lt;br /&gt;
&lt;br /&gt;
=== 使い方 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = [&amp;quot;Morning&amp;quot;,&amp;quot;Afternoon&amp;quot;,&amp;quot;Evening&amp;quot;];&lt;br /&gt;
var value = [&amp;quot;あんぱん&amp;quot;,&amp;quot;ジャムパン&amp;quot;,&amp;quot;カレーパン&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
Document.Write(value[ShowMenuMini(menu) ] );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
なお、セパレーターを挿入する機能はオフにしてあります。セパレータを使いたい場合は8行目のコメントアウトを外してください。その場合はメニュの表示と返り値がずれることに注意してください。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = [&amp;quot;Morning&amp;quot;,&amp;quot;Afternoon&amp;quot;,&amp;quot;----&amp;quot;,&amp;quot;Evening&amp;quot;];&lt;br /&gt;
var value = [&amp;quot;あんぱん&amp;quot;,&amp;quot;ジャムパン&amp;quot;,&amp;quot;ここが選ばれることはない&amp;quot;,&amp;quot;カレーパン&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
Document.Write(value[ShowMemuMini(menu) ] );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>126.23.41.25</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=573</id>
		<title>ポップアップメニューを手軽に扱う</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=573"/>
		<updated>2012-12-07T04:39:19Z</updated>

		<summary type="html">&lt;p&gt;126.23.41.25: /* おまけ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;マクロではないのですが、Meryのポップアップメニューを手軽に扱える関数を書いてみました。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(menu_obj, position, separator, esc){&lt;br /&gt;
    var MAX_NEST = 5;//ネストの最大深度&lt;br /&gt;
    &lt;br /&gt;
    var id_counter = 1;&lt;br /&gt;
    var item_list = [];&lt;br /&gt;
    var popup&lt;br /&gt;
    var selected_id;&lt;br /&gt;
    &lt;br /&gt;
    //メニューをESCキーで閉じた時の挙動を登録&lt;br /&gt;
    if(esc === undefined){&lt;br /&gt;
        item_list[0] = function(){Quit();};&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        item_list[0] = esc;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //メニュー位置の初期化&lt;br /&gt;
    if(position !== mePosMouse) {&lt;br /&gt;
        position = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //セパレーターを挿入する条件&lt;br /&gt;
    var isSeparator = function(str){&lt;br /&gt;
        if(separator === false){&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        else if(typeof separator === &amp;quot;string&amp;quot;){&lt;br /&gt;
            return (str.indexOf(separator) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return (str.indexOf(&amp;quot;----&amp;quot;) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ObjectOrArray = function(target){&lt;br /&gt;
        if(target){&lt;br /&gt;
            switch(Object.prototype.toString.call(target) ){&lt;br /&gt;
                case &amp;quot;[object Object]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Object&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;[object Array]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Array&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    return &amp;quot;Other&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return &amp;quot;Other&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ArrayToPopup = function(list){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var i =0; i &amp;lt; list.length; i++){&lt;br /&gt;
            if(isSeparator(list[i].toString() ) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                menu.Add(list[i].toString(), i + 1);&lt;br /&gt;
            }&lt;br /&gt;
            item_list[i + 1] = list[i];&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var  ObjectToPopup = function(obj, nest){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var key in obj){&lt;br /&gt;
            if(isSeparator(key) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                if(ObjectOrArray(obj[key] ) !== &amp;quot;Object&amp;quot;){&lt;br /&gt;
                    menu.Add(key, id_counter);&lt;br /&gt;
                    item_list[id_counter] = obj[key];&lt;br /&gt;
                    id_counter++;&lt;br /&gt;
                }&lt;br /&gt;
                else{&lt;br /&gt;
                    if(nest &amp;lt; MAX_NEST){&lt;br /&gt;
                        menu.AddPopup(key, ObjectToPopup(obj[key], nest + 1) );&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    //ここまで変数、関数の定義&lt;br /&gt;
    //関数の本体はここから&lt;br /&gt;
    switch(ObjectOrArray(menu_obj) ){&lt;br /&gt;
        case &amp;quot;Object&amp;quot;:&lt;br /&gt;
            popup =  ObjectToPopup(menu_obj, 0);&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;Array&amp;quot;:&lt;br /&gt;
            popup = ArrayToPopup(menu_obj);&lt;br /&gt;
            break;&lt;br /&gt;
        default://第1引数が配列かオブジェクト以外の時&lt;br /&gt;
            throw new Error(&amp;quot;第1引数には配列またはオブジェクトを指定してください&amp;quot;);&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    selected_id = popup.Track(position);&lt;br /&gt;
    &lt;br /&gt;
    if(typeof(item_list[selected_id] ) === &amp;quot;function&amp;quot;){&lt;br /&gt;
        return item_list[selected_id]();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return item_list[selected_id];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 簡単な使い方 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var x = ShowPopupMenu([&amp;quot;Spring&amp;quot;,&amp;quot;Summer&amp;quot;,&amp;quot;Autumn&amp;quot;,&amp;quot;Winter&amp;quot;] );&lt;br /&gt;
Document.Write(x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
選択された文字列が挿入されます。&lt;br /&gt;
&lt;br /&gt;
== リファレンス ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(&lt;br /&gt;
    menu_obj : Object | Array,&lt;br /&gt;
    position : int,&lt;br /&gt;
    separator : Boolean | String,&lt;br /&gt;
    esc : Anything&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;返り値&#039;&#039;&#039; : 選択されたメニューに対応する値。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;menu_obj&#039;&#039;&#039; : 必ず指定する。メニューを定義したオブジェクトまたは配列。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;position&#039;&#039;&#039; : 省略可能。メニューを表示する位置。mePosMouseを指定するとカーソル位置に表示される。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;serarator&#039;&#039;&#039; : 省略可能。セパレーターを挿入する条件。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;esc&#039;&#039;&#039; : 省略可能。ESCキーを押した時の挙動。後述。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== 配列を指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
第1引数に配列を指定するとその配列内の要素をメニューに表示します。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var list = [&amp;quot;メニュー1&amp;quot;,&amp;quot;メニュー2&amp;quot;,&amp;quot;メニュー3&amp;quot;,&amp;quot;メニュー4&amp;quot;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
SowPopupMenu関数の返り値は選択された要素になります。&lt;br /&gt;
&lt;br /&gt;
=== オブジェクトを指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトのキーがメニューに表示ます。キーに対応する値が返り値になります。（値が関数オブジェクトの時は後述。）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
こうするとサブメニューを作れます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
連続したハイフン4つ（----）をキー内に含む場合セパレータになります。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;----&amp;quot;] = 0; //何らかの値を入れておく。&lt;br /&gt;
&lt;br /&gt;
list = [&amp;quot;menu1&amp;quot;,&amp;quot;menu----2&amp;quot;,&amp;quot;menu3&amp;quot;] //配列でも可能。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 使用例 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;----&amp;quot;] = 0;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー2&amp;quot;] = &amp;quot;Submenu2&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
このように指定することも可能です。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {&lt;br /&gt;
    &amp;quot;メニュー1&amp;quot; : &amp;quot;メニュー1&amp;quot;,&lt;br /&gt;
    &amp;quot;メニュー2&amp;quot; : 2,&lt;br /&gt;
    &amp;quot;グループ1&amp;quot; : {&lt;br /&gt;
        &amp;quot;サブメニュー1&amp;quot; : &amp;quot;SubMenu1&amp;quot;,&lt;br /&gt;
        &amp;quot;----&amp;quot; : 0,&lt;br /&gt;
        &amp;quot;サブメニュー2&amp;quot; : &amp;quot;SubMenu2&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 返り値 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトでメニューを定義するする場合、値が関数オブジェクトかそれ以外かで返り値が変わります。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行して、その関数の返り値がShowPopupMenu関数の返り値になります。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function func1(){&lt;br /&gt;
    Document.Write(&amp;quot;func1&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;func1&amp;quot;] = func1; // func1() 、ではない。（括弧は付けない）&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
「func1」がエディターのキャレット位置に挿入され、0が返ります。&lt;br /&gt;
&lt;br /&gt;
もちろんfunctionリテラルで直接書いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;func2&amp;quot;] = function(){Alert(&amp;quot;func2&amp;quot;);};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
関数オブジェクト以外を値とした場合はその値がそのまま返ります。&lt;br /&gt;
&lt;br /&gt;
=== その他の引数の説明 ===&lt;br /&gt;
&lt;br /&gt;
第2引数にmePosMouseを指定するとマウスカーソルの位置にメニューが表示されます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu, mePosMouse)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
それ以外の値の時はキャレット位置に表示します。&lt;br /&gt;
&lt;br /&gt;
第3引数にfalseを指定するとセパレーターを挿入しなくなります。また文字列を指定するとその文字列が含まれるメニューをセパレータにします。それ以外の値は無視します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,false) // セパレーターを挿入しない&lt;br /&gt;
ShowPopupMenu(menu,0,&amp;quot;ああああ&amp;quot;) // 「ああああ」が含まれるメニューをセパレータにします。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
第4引数でメニュー表示時にESCキーを押した時の挙動を変更できます。デフォルトではそこでスクリプトの実行が終了します。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行し、それ以外の値（undefinedを除く）の場合はその値を返します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,0,-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上の例ではESCキーを押してもスクリプトは終了せず、関数は-1を返します。&lt;br /&gt;
&lt;br /&gt;
=== その他 ===&lt;br /&gt;
&lt;br /&gt;
デフォルトではメニューの最大階層は5（2行目のMAX_NESTの値を書き換えることで変更可能）になっています。これは&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = 1;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = menu;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
といった再帰定義で無限ループになるのを防ぐためです。&lt;/div&gt;</summary>
		<author><name>126.23.41.25</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=572</id>
		<title>ポップアップメニューを手軽に扱う</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9D%E3%83%83%E3%83%97%E3%82%A2%E3%83%83%E3%83%97%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%82%92%E6%89%8B%E8%BB%BD%E3%81%AB%E6%89%B1%E3%81%86&amp;diff=572"/>
		<updated>2012-12-07T04:20:07Z</updated>

		<summary type="html">&lt;p&gt;126.23.41.25: Meryのポップアップメニュのラッパー関数ShowPopupMenuの説明&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;マクロではないのですが、Meryのポップアップメニューを手軽に扱える関数を書いてみました。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(menu_obj, position, separator, esc){&lt;br /&gt;
    var MAX_NEST = 5;//ネストの最大深度&lt;br /&gt;
    &lt;br /&gt;
    var id_counter = 1;&lt;br /&gt;
    var item_list = [];&lt;br /&gt;
    var popup&lt;br /&gt;
    var selected_id;&lt;br /&gt;
    &lt;br /&gt;
    //メニューをESCキーで閉じた時の挙動を登録&lt;br /&gt;
    if(esc === undefined){&lt;br /&gt;
        item_list[0] = function(){Quit();};&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        item_list[0] = esc;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //メニュー位置の初期化&lt;br /&gt;
    if(position !== mePosMouse) {&lt;br /&gt;
        position = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    //セパレーターを挿入する条件&lt;br /&gt;
    var isSeparator = function(str){&lt;br /&gt;
        if(separator === false){&lt;br /&gt;
            return false;&lt;br /&gt;
        }&lt;br /&gt;
        else if(typeof separator === &amp;quot;string&amp;quot;){&lt;br /&gt;
            return (str.indexOf(separator) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return (str.indexOf(&amp;quot;----&amp;quot;) !== -1);&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ObjectOrArray = function(target){&lt;br /&gt;
        if(target){&lt;br /&gt;
            switch(Object.prototype.toString.call(target) ){&lt;br /&gt;
                case &amp;quot;[object Object]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Object&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                case &amp;quot;[object Array]&amp;quot;:&lt;br /&gt;
                    return &amp;quot;Array&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
                default:&lt;br /&gt;
                    return &amp;quot;Other&amp;quot;;&lt;br /&gt;
                    break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else{&lt;br /&gt;
            return &amp;quot;Other&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var ArrayToPopup = function(list){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var i =0; i &amp;lt; list.length; i++){&lt;br /&gt;
            if(isSeparator(list[i].toString() ) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                menu.Add(list[i].toString(), i + 1);&lt;br /&gt;
            }&lt;br /&gt;
            item_list[i + 1] = list[i];&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    &lt;br /&gt;
    var  ObjectToPopup = function(obj, nest){&lt;br /&gt;
        var menu = CreatePopupMenu();&lt;br /&gt;
        &lt;br /&gt;
        for(var key in obj){&lt;br /&gt;
            if(isSeparator(key) ){&lt;br /&gt;
                menu.Add(&amp;quot;dummy&amp;quot;, 999, meMenuSeparator);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                if(ObjectOrArray(obj[key] ) !== &amp;quot;Object&amp;quot;){&lt;br /&gt;
                    menu.Add(key, id_counter);&lt;br /&gt;
                    item_list[id_counter] = obj[key];&lt;br /&gt;
                    id_counter++;&lt;br /&gt;
                }&lt;br /&gt;
                else{&lt;br /&gt;
                    if(nest &amp;lt; MAX_NEST){&lt;br /&gt;
                        menu.AddPopup(key, ObjectToPopup(obj[key], nest + 1) );&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        return menu;&lt;br /&gt;
    };&lt;br /&gt;
    //ここまで変数、関数の定義&lt;br /&gt;
    //関数の本体はここから&lt;br /&gt;
    switch(ObjectOrArray(menu_obj) ){&lt;br /&gt;
        case &amp;quot;Object&amp;quot;:&lt;br /&gt;
            popup =  ObjectToPopup(menu_obj, 0);&lt;br /&gt;
            break;&lt;br /&gt;
        case &amp;quot;Array&amp;quot;:&lt;br /&gt;
            popup = ArrayToPopup(menu_obj);&lt;br /&gt;
            break;&lt;br /&gt;
        default://第1引数が配列かオブジェクト以外の時&lt;br /&gt;
            throw new Error(&amp;quot;第1引数には配列またはオブジェクトを指定してください&amp;quot;);&lt;br /&gt;
            break;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    selected_id = popup.Track(position);&lt;br /&gt;
    &lt;br /&gt;
    if(typeof(item_list[selected_id] ) === &amp;quot;function&amp;quot;){&lt;br /&gt;
        return item_list[selected_id]();&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return item_list[selected_id];&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== 簡単な使い方 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var x = ShowPopupMenu([&amp;quot;Spring&amp;quot;,&amp;quot;Summer&amp;quot;,&amp;quot;Autumn&amp;quot;,&amp;quot;Winter&amp;quot;] );&lt;br /&gt;
Document.Write(x);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
選択された文字列が挿入されます。&lt;br /&gt;
&lt;br /&gt;
== リファレンス ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowPopupMenu(&lt;br /&gt;
    menu_obj : Object | Array,&lt;br /&gt;
    position : int,&lt;br /&gt;
    separator : Boolean | String,&lt;br /&gt;
    esc : Anything&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;返り値&#039;&#039;&#039; : 選択されたメニューに対応する値。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;menu_obj&#039;&#039;&#039; : 必ず指定する。メニューを定義したオブジェクトまたは配列。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;position&#039;&#039;&#039; : 省略可能。メニューを表示する位置。mePosMouseを指定するとカーソル位置に表示される。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;serarator&#039;&#039;&#039; : 省略可能。セパレーターを挿入する条件。後述。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;esc&#039;&#039;&#039; : 省略可能。ESCキーを押した時の挙動。後述。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== 配列を指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
第1引数に配列を指定するとその配列内の要素をメニューに表示します。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var list = [&amp;quot;メニュー1&amp;quot;,&amp;quot;メニュー2&amp;quot;,&amp;quot;メニュー3&amp;quot;,&amp;quot;メニュー4&amp;quot;]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
SowPopupMenu関数の返り値は選択された要素になります。&lt;br /&gt;
&lt;br /&gt;
=== オブジェクトを指定する場合 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトのキーがメニューに表示ます。キーに対応する値が返り値になります。（値が関数オブジェクトの時は後述。）&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
こうするとサブメニューを作れます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
連続したハイフン4つ（----）をキー内に含む場合セパレータになります。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;----&amp;quot;] = 0; //何らかの値を入れておく。&lt;br /&gt;
&lt;br /&gt;
list = [&amp;quot;menu1&amp;quot;,&amp;quot;menu----2&amp;quot;,&amp;quot;menu3&amp;quot;] //配列でも可能。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 使用例 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = &amp;quot;メニュー1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;メニュー2&amp;quot;] = 2;&lt;br /&gt;
&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = {};&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー1&amp;quot;] = &amp;quot;SubMenu1&amp;quot;;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;----&amp;quot;] = 0;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;][&amp;quot;サブメニュー2&amp;quot;] = &amp;quot;Submenu2&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
このように指定することも可能です。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {&lt;br /&gt;
    &amp;quot;メニュー1&amp;quot; : &amp;quot;メニュー1&amp;quot;,&lt;br /&gt;
    &amp;quot;メニュー2&amp;quot; : 2,&lt;br /&gt;
    &amp;quot;グループ1&amp;quot; : {&lt;br /&gt;
        &amp;quot;サブメニュー1&amp;quot; : &amp;quot;SubMenu1&amp;quot;,&lt;br /&gt;
        &amp;quot;----&amp;quot; : 0,&lt;br /&gt;
        &amp;quot;サブメニュー2&amp;quot; : &amp;quot;SubMenu2&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 返り値 ===&lt;br /&gt;
&lt;br /&gt;
オブジェクトでメニューを定義するする場合、値が関数オブジェクトかそれ以外かで返り値が変わります。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行して、その関数の返り値がShowPopupMenu関数の返り値になります。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function func1(){&lt;br /&gt;
    Document.Write(&amp;quot;func1&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;func1&amp;quot;] = func1; // func1() 、ではない。（括弧は付けない）&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
「func1」がエディターのキャレット位置に挿入され、0が返ります。&lt;br /&gt;
&lt;br /&gt;
もちろんfunctionリテラルで直接書いてもかまいません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
menu[&amp;quot;func2&amp;quot;] = function(){Alert(&amp;quot;func2&amp;quot;);};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
関数オブジェクト以外を値とした場合はその値がそのまま返ります。&lt;br /&gt;
&lt;br /&gt;
=== その他の引数の説明 ===&lt;br /&gt;
&lt;br /&gt;
第2引数にmePosMouseを指定するとマウスカーソルの位置にメニューが表示されます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu, mePosMouse)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
それ以外の値の時はキャレット位置に表示します。&lt;br /&gt;
&lt;br /&gt;
第3引数にfalseを指定するとセパレーターを挿入しなくなります。また文字列を指定するとその文字列が含まれるメニューをセパレータにします。それ以外の値は無視します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,false) // セパレーターを挿入しない&lt;br /&gt;
ShowPopupMenu(menu,0,&amp;quot;ああああ&amp;quot;) // 「ああああ」が含まれるメニューをセパレータにします。&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
第4引数でメニュー表示時にESCキーを押した時の挙動を変更できます。デフォルトではそこでスクリプトの実行が終了します。&lt;br /&gt;
関数オブジェクトを指定するとその関数を実行し、それ以外の値（undefinedを除く）の場合はその値を返します。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
ShowPopupMenu(menu,0,0,-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上の例ではESCキーを押してもスクリプトは終了せず、関数は-1を返します。&lt;br /&gt;
&lt;br /&gt;
=== その他 ===&lt;br /&gt;
&lt;br /&gt;
デフォルトではメニューの最大階層は5（2行目のMAX_NESTの値を書き換えることで変更可能）になっています。これは&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = {};&lt;br /&gt;
menu[&amp;quot;メニュー1&amp;quot;] = 1;&lt;br /&gt;
menu[&amp;quot;グループ1&amp;quot;] = menu;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
といった再帰定義で無限ループになるのを防ぐためです。&lt;br /&gt;
&lt;br /&gt;
== おまけ ==&lt;br /&gt;
サブメニューとかいいから簡単に使いたいという人向け。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowMenuMini(list){&lt;br /&gt;
    var pos = 0;&lt;br /&gt;
&lt;br /&gt;
    var ret = 0;&lt;br /&gt;
    var menu = CreatePopupMenu();&lt;br /&gt;
&lt;br /&gt;
    for(i = 0;i &amp;lt; list.length;i++){&lt;br /&gt;
        //if(list[i].toString().indexOf(&amp;quot;----&amp;quot;) !== -1){menu.Add(&amp;quot;hoge&amp;quot;,999,meMenuSeparator);continue;}&lt;br /&gt;
        menu.Add(list[i].toString(),i + 1);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    ret = menu.Track(pos);&lt;br /&gt;
&lt;br /&gt;
    if(ret === 0){&lt;br /&gt;
        Quit(); //ESCキーを押した時の挙動&lt;br /&gt;
    }&lt;br /&gt;
    else{&lt;br /&gt;
        return ret - 1;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
function ShowMenuMini(&lt;br /&gt;
    list : Array&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
引数には配列を指定する。選択された要素のインデックスが返り値になる。&lt;br /&gt;
&lt;br /&gt;
=== 使い方 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = [&amp;quot;Morning&amp;quot;,&amp;quot;Afternoon&amp;quot;,&amp;quot;Evening&amp;quot;];&lt;br /&gt;
var value = [&amp;quot;あんぱん&amp;quot;,&amp;quot;ジャムパン&amp;quot;,&amp;quot;カレーパン&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
Document.Write(value[ShowMemuMini(menu) ] );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
なお、セパレーターを挿入する機能はオフにしてあります。セパレータを使いたい場合は8行目のコメントアウトを外してください。その場合はメニュの表示と返り値がずれることに注意してください。&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
var menu = [&amp;quot;Morning&amp;quot;,&amp;quot;Afternoon&amp;quot;,&amp;quot;----&amp;quot;,&amp;quot;Evening&amp;quot;];&lt;br /&gt;
var value = [&amp;quot;あんぱん&amp;quot;,&amp;quot;ジャムパン&amp;quot;,&amp;quot;ここが選ばれることはない&amp;quot;,&amp;quot;カレーパン&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
Document.Write(value[ShowMemuMini(menu) ] );&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>126.23.41.25</name></author>
	</entry>
	<entry>
		<id>https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=571</id>
		<title>マクロライブラリ</title>
		<link rel="alternate" type="text/html" href="https://www.haijin-boys.com/wiki/index.php?title=%E3%83%9E%E3%82%AF%E3%83%AD%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA&amp;diff=571"/>
		<updated>2012-12-07T02:03:31Z</updated>

		<summary type="html">&lt;p&gt;126.23.41.25: 項目の追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ここは Mery で使用できるマクロを集めたライブラリです&lt;br /&gt;
&lt;br /&gt;
スクリプトを拡張子「js」にして「My Macros」等に保存し、マクロメニューの「選択」や「カスタマイズ」から読み込んで使用してください。マクロライブラリはどなたでも自由に編集できますので、みなさんが作成した便利なマクロをどんどん掲載してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*[[可変長を固定長に変換]] (kuro)&lt;br /&gt;
*[[CSV のカーソル位置の列を削除]] (kuro)&lt;br /&gt;
*[[パスを取得]] (kuro)&lt;br /&gt;
*[[テキストブラウザ]] (kuro)&lt;br /&gt;
*[[文書から検索]] (kuro)&lt;br /&gt;
*[[単語を抽出]] (kuro)&lt;br /&gt;
*[[フォルダ内のファイルをすべて開く]] (kuro)&lt;br /&gt;
*[[SHA でハッシュ化]] (kuro)&lt;br /&gt;
*[[Zen Coding]] (kuro)&lt;br /&gt;
*[[ファイルを比較]] (kuro)&lt;br /&gt;
*[[ctags.exeでtagsファイルを生成、タグジャンプを行うマクロ]] (kazy)&lt;br /&gt;
*[[タグファイルから補完]] (n)&lt;br /&gt;
*[[TeraPadのCtrl↑と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[TeraPadのCtrl↓と同じような動作をするマクロ]] (suke)&lt;br /&gt;
*[[Vz 風テキストスタック 2 ストロークキー]] (goat) update 2012/10/01&lt;br /&gt;
*[[ブックマーク一覧ジャンプ]] (goat) update 2012/09/24 &lt;br /&gt;
*[[clustalw を用いてアライメントを実行]] (suke)&lt;br /&gt;
*[[SAPI 使って単語読み上げ]] (miso)&lt;br /&gt;
*[[対応する括弧に移動]] (kuro, kurama)&lt;br /&gt;
*[[選択文字列を強調]] (kuro)&lt;br /&gt;
*[[旧漢字から新漢字に変換]] (furu)&lt;br /&gt;
*[[行頭に移動]] (kuro)&lt;br /&gt;
*[[引用の追加]] (kuro)&lt;br /&gt;
*[[標準変換]] (kuro)&lt;br /&gt;
*[[Yahoo!天気情報]] (kuro)&lt;br /&gt;
*[[ファイル名を引数にしてアプリ起動]] (kuro, miso)&lt;br /&gt;
*[[このファイルから検索(マッチしない行)]] (kuro)&lt;br /&gt;
*[[このファイルから検索(マッチする行)]] (kuro)&lt;br /&gt;
*[[バイト数]] (kuro)&lt;br /&gt;
*[[昇順で並び替え]] (kuro)&lt;br /&gt;
*[[降順で並び替え]] (kuro)&lt;br /&gt;
*[[連続する重複行を削除]] (kuro)&lt;br /&gt;
*[[日付と時刻を挿入]] (n)&lt;br /&gt;
*[[JavaScript を実行]] (n)&lt;br /&gt;
*[[拡張子の違うファイルを開く]] (n)&lt;br /&gt;
*[[フォルダを開く]] (n)&lt;br /&gt;
*[[コマンドプロンプトを開く]] (n)&lt;br /&gt;
*[[Eclipse風コメントアウト]] (ks)&lt;br /&gt;
*[[非選択状態でも逆インデント]] (papagoat)&lt;br /&gt;
*[[オフインデント]] (inuuik)&lt;br /&gt;
*[[インデントブロック作り]] (inuuik)&lt;br /&gt;
*[[サロゲートペアのコードポイント表記]] (inuuik)&lt;br /&gt;
*[[字を繰り返し]] (inuuik)&lt;br /&gt;
*[[変更行の検出]] (ks)&lt;br /&gt;
*[[通り抜けインデント]] (inuuik)&lt;br /&gt;
*[[SDIウィンドウの記憶と復帰]](papagoat) Update 2012/10/23&lt;br /&gt;
*[[エンティティ参照と文字参照]] (inuuik)&lt;br /&gt;
*[[アラビア語ヒンディー数字]] (inuuik)&lt;br /&gt;
*[[次を検索フィルタ]] (inuuik)&lt;br /&gt;
*[[数字は動く]] (inuuik)&lt;br /&gt;
*[[ルビとrubyタグ]] (inuuik)&lt;br /&gt;
*[[範囲両端から広く]] (inuuik)&lt;br /&gt;
*[[外国語の合字と発音記号]] (inuuik)&lt;br /&gt;
*[[文字列中のパス起動]] (ks)&lt;br /&gt;
*[[選択大雑ぱス]] (inuuik)&lt;br /&gt;
*[[勝手版マクロリファレンス]] (inuuik)&lt;br /&gt;
*[[憶えのJavaScript]] (inuuik)&lt;br /&gt;
*[[勝手版TypeScript編集モード]] (inuuik)&lt;br /&gt;
*[[クリップボードのJavaScript]] (inuuik)&lt;br /&gt;
*[[ぐーてんべるく和書]] (inuuik)&lt;br /&gt;
*[[終了時状態保持・復元]] (ks)&lt;br /&gt;
*[[よく使うフォルダ]] (手石)&lt;br /&gt;
*[[ブックマーク系コマンド集]] (ks) Update 2012/11/28&lt;br /&gt;
*[[連番の挿入]] (手石)&lt;br /&gt;
*[[コードスニペットもどき]] (手石)&lt;br /&gt;
*[[ポップアップメニューを手軽に扱う]] (komorebikoboshi)&lt;/div&gt;</summary>
		<author><name>126.23.41.25</name></author>
	</entry>
</feed>