MQL4 CCheckBox CCheckGroupチェックステータス取得

MQL4 のパネル(CAppDialog)にチェックボックスを置き、ユーザーがチェックを入れたか・外したかを取得する方法です。1つだけなら CCheckBox の Checked()、複数をまとめて扱うなら CCheckGroup の Value() を使います。

[PR]


使うメソッドの早見表

クラス メソッド できること
CCheckBox Checked() チェック状態を取得(true / false)
CCheckBox Checked(true / false) チェック状態をプログラムから切り替える
CCheckGroup AddItem(テキスト, 値) チェックボックスを1つ追加し、値を割り当てる
CCheckGroup Value() チェックされた項目の値の合計を取得
CCheckGroup Check(番号, 値) 指定した項目をプログラムからチェック済みにする

CheckBox のチェック状態は Checked() で取得する

CheckBox.mqh(MQL4\Include\Controls\CheckBox.mqh)には、次の2つの Checked() が用意されています。

引数なしの Checked() は、チェックが入っていれば true、外れていれば false を返します。引数ありの Checked(true) / Checked(false) は、チェック状態をプログラムから切り替えるときに使います。

Event Handler でチェックの変化を受け取る

チェックボックスを1つ置いたパネルを作り、クリックされるたびに表示を「Checked」「UnChecked」に切り替えます。大まかな流れは次の3ステップです。

  • CheckBox.mqh をインクルード
    パネル本体の Dialog.mqh と、Controls\CheckBox.mqh を読み込みます
  • カスタムクラスを定義
    CAppDialog を継承した CTestPanel クラスを作り、CreateCheckBox() でチェックボックスを配置します。イベントマップ(EVENT_MAP_BEGIN~EVENT_MAP_END)で、チェックが変わったとき(ON_CHANGE)に OnChangeCheckBox() が呼ばれるようにします
  • オブジェクトを作って実行
    CTestPanel のインスタンス TPanel を作り、OnInit() で Create() と Run() を実行します

チェックを入れると、表示が「Checked」に変わります。

チェックを外すと「UnChecked」になります。

CCheckGroup で複数のチェックボックスをまとめる

CCheckGroup を使うと、複数の CCheckBox を1つのグループとして扱えます。CheckGroup.mqh の中で CheckBox.mqh も読み込まれているので、インクルードは CheckGroup.mqh だけで足ります。

AddItem() で項目を追加するとき、ビット演算の左シフト(1<<i)で各項目に 1・2・4 の値を割り当てます。チェックされた項目の値の合計が Value() で取得できるので、ここでは Comment() でチャートに表示します。

CheckBox_0 と CheckBox_1 にチェックを入れると、1 + 2 = 3 が表示されます。

チェックボックス 割り当てる値 2進数 10進数
CheckBox_0 1<<0 0001 1
CheckBox_1 1<<1 0010 2
CheckBox_2 1<<2 0100 4

2進数で見ると、各項目が別々の桁を使っているので、合計値からどれにチェックが入っているかを判別できます。3つすべてにチェックを入れると 1 + 2 + 4 = 7 です。

どの項目にチェックが入っているかを判定する

合計値から個々の状態を取り出すには、ビット演算の AND(&)を使います。「値 & (1<<i)」が 0 でなければ、i 番目の項目にチェックが入っています。

上のコードの OnChangeCheckGroup() を次のように差し替えると、各項目の ON / OFF をチャートに表示できます。

起動時に特定の項目へチェックを入れておきたい場合は、CreateCheckGroup() の for ループのあと、Comment() の前で Check(番号, 値) を呼びます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする