Sleep関数でボタン押下を演出する

押して離すと戻るタイプのボタンに使う

MT4にはオブジェクトを使って簡易的なフォームを作ることが可能です。

その中にボタンがあるのですが、MT4のボタンは押して離しても押しっ放しの状態になるタイプのボタンです。

スイッチ型と言えばニュアンス伝わりますでしょうか?

そのボタンがON状態なのかOFF状態なのかを制御しているのがOBJPROP_STATEプロパティです。

trueを設定すればON状態になり、見た目では凹んでいる状態になります。

逆にfalseを設定すればOFF状態になり、見た目では押されていない元の状態になります。

一般的にソフトウェアのボタンって、押している間は凹んでいるけど、離したら元に戻るタイプだと思うんですよね。

その場合、ボタン押下時の処理後にOBJPROP_STATEをfalseに設定することになります。そうしないと凹みっ放しのままになっちゃいます。

ただ、OBJPROP_STATEを即座にfalseに設定しちゃうと、押した感が出ません。

実際には凹んで元に戻るという一連の動きが実行されているのですが、早すぎて見えないわけです。

孫悟空のパンチが早すぎて見えないのと一緒ですね!

そこでSleep関数の登場です。

Sleep関数は「何もしない」ということをしてくれる関数です。

これを使えば元に戻すタイミングをワンテンポ遅らすことが可能です。

そうすることで、押して戻った感を演出でき、ユーザーが戸惑わなくて済むわけです。

非常に地味ですが、神は細部に宿るということです。

余談ですが、違和感を何も覚えないシステムやソフトウェアというのは実は極めて洗練された質の高いものだと思ってください。

最後にサンプルコードを掲載しておきます。

//+------------------------------------------------------------------+
//| Chart Event function                                             |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
  if(id == CHARTEVENT_OBJECT_CLICK){
    if(sparam == "オブジェクト名"){
      // ボタンが押されている状態か?
      if(ObjectGetInteger(0, sparam, OBJPROP_STATE)){
        // ボタン押下時の処理をここに記載

        // ボタンを押して離した雰囲気を出すための待機時間
        Sleep(100);

        // 押されていない状態に戻す
        ObjectSetInteger(0, sparam, OBJPROP_STATE, false);
      }
    }
  }
}

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG