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

2014年1月25日 (土) 19:35時点における手石 (トーク | 投稿記録)による版 (ページの作成:「= 概要 = ポップアップメニューでチェックボックスのような動作を実現します。 = 利用方法 = * 選択項目は配列で与えてくだ...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

概要

ポップアップメニューでチェックボックスのような動作を実現します。

利用方法

  • 選択項目は配列で与えてください。
  • 返り値は、同じ長さの配列です。
  • 非選択の項目のインデックスにゼロが入ってます。選択項目は、meMenuCheckedの数値です。
  • キャンセルしたときの返り値は、空配列です。

コード

// chkbox.js
// 2014/01/25/

CheckBox = function(){
  this.initialize.apply( this, arguments );
}

CheckBox.prototype = {
  menuitem : "アイテムの配列",
  selected : "アイテム選択状況の配列、非選択が0",
  initialize : function( arg1 ){
    this.menuitem = arg1;
    this.selected = [];
    for ( var i = 0; i < this.menuitem.length; i++ ){
      this.selected.push( 0 );
    }
  },
  show : function(){
    var off = 5;
    var r = 0;
    while( r >= 0 ){
      r = showPopupMenu( this );
      if ( r == 0 - off ){
//        Alert( "キャンセルされました。" );
        return [];
      } else if ( r == 1 - off ){
        return this.selected;
      } else {
        this.selected[ r ] = ( this.selected[ r ] == 0 ) ? meMenuChecked : 0;
      };
    }

    function showPopupMenu( obj ){
      var menu = CreatePopupMenu();
      for ( var i = 0; i < obj.menuitem.length; i++ ){
        menu.Add( obj.menuitem[ i ] , i + off, obj.selected[ i ] );
      }
      menu.Add( "---", 0, meMenuSeparator );
      menu.Add( "キャンセル", 0, 0 );
      menu.Add( "選択終了", 1, 0 );
      return menu.track( 0 ) - off;
    }
  }
}


var chkbox1 = new CheckBox( [ "a", "b", "c", "d" ] );
Alert( chkbox1.show() );

その他

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

スポンサーリンク