ポップアップメニューでチェックボックス

提供: MeryWiki
2014年1月26日 (日) 10:08時点における手石 (トーク | 投稿記録)による版
ナビゲーションに移動 検索に移動

概要

ポップアップメニューを使ったチェックボックス(のようなもの)です。

機能

  • 選択項目は、{ "項目名" : boolean }という形の連想配列で与えてください。
    trueで与えると最初からチェックされます。
  • 返り値も、連想配列です。
  • キャンセルしたときの返り値は、空の連想配列です。

履歴

  • 20140125 初版
  • 20140126 関数に変更。また、初期値を与えられるようにした。

コード

// chkbox.js
// 2014/01/26/

var r = CheckBox( { "a":true, "b":false, "c":false, "d":false } );
for ( var i in r ){
  Alert( i + " -> " + r[ i ] );
};

function CheckBox( arg1 ){
  var menuitem = arg1;
  var index = [];
  var off = 5;
  var r = 0;

  while( r >= 0 ){
    r = showPopupMenu();
    if ( r == 0 - off ){
      return {};
    } else if ( r == 1 - off ){
      return menuitem;
    } else {
      menuitem[ index[r] ] = !menuitem[ index[r] ];
    };
  }

  function showPopupMenu(){
    var menu = CreatePopupMenu();
    var i = 0;
    for ( var key in menuitem ){
      menu.Add( key , i + off, ( menuitem[ key ] )? meMenuChecked : 0 );
      index.push( key );
      i++;
    }
    menu.Add( "---", 0, meMenuSeparator );
    menu.Add( "キャンセル", 0, 0 );
    menu.Add( "選択終了", 1, 0 );
    return menu.track( 0 ) - off;
  }

}

その他

おかしい箇所やもっといい方法があったら教えてください。

スポンサーリンク