【MQL4 : MT4】GUI の インジケータ | EA を作る【備忘録】【Dialog】


2020/08/24追記
Youtubeにて動画解説
https://www.youtube.com/watch?v=imVHPZQanWs&list=PLAekJGpx3pyPZJjlnPF_cM0mwNLy5l1Vl&index=2&t=0s
List
https://www.youtube.com/playlist?list=PLAekJGpx3pyPZJjlnPF_cM0mwNLy5l1Vl

シンプルなPanelを作る

標準ライブラリのPanel、Dialogクラスを使ってGUIを作って行きます。

①CAppDialog にパネルベースを作成する

CAppDialogは、結合されたアプリケーションダイアログコントロールのクラスです。

↓↓ Panelを作成するを作成する最低限のコード ↓↓

guiwindow.mq4
#include <Controls\Dialog.mqh> --- 1

CAppDialog AppWindow; --- 2

int Reason;

int OnInit()
{
   if( Reason != REASON_CHARTCHANGE && Reason != REASON_PARAMETERS )
   {
      if( !AppWindow.Create( ChartID(), "SampleTitle", 0, 50, 50, 500, 400 ) ) --- 3
         return( INIT_FAILED );
      if( !AppWindow.Run() ) 
         return( INIT_FAILED );
   }   
   return( INIT_SUCCEEDED );
}

void OnDeinit( const int reason )
{
   if( reason != REASON_CHARTCHANGE && reason != REASON_PARAMETERS && reason != REASON_ACCOUNT )//3 && 5 && 6
   {
      AppWindow.Destroy( reason ); --- 4
   }
   Reason = reason;
}

void OnChartEvent( const int    id,
                   const long   &lparam,
                   const double &dparam,
                   const string &sparam)
{
   AppWindow.ChartEvent( id, lparam, dparam, sparam ); --- 5
}

ソースコード詳細

1. Controlsフォルダの中のDialog.mqhをインクルードする。
 MT4/Include/Controls フォルダの中に部品が入っている。

#include <Controls\Dialog.mqh>

2. グローバルでAppDialog クラスのインスタンスを宣言

CAppDialog AppWindow;

3. AppWindowのパネルを作成 と AppWindow実行
 AppWindow.Create( int ChartID(), string "Title", int subwin, int x1, int y1, int x2, int y2 )
 AppWindo.Run() で実行

if( !AppWindow.Create( ChartID(), "SimpleOrder", 0, 50, 50, 250, 170 ))
      return( INIT_FAILED );
if( !AppWindow.Run() ) 
      return( INIT_FAILED );

4. AppWindowを破棄
ココは 最重要Point!
パネルの破棄をしないと、時間枠やシンボルの各変更に、
既存のもの上に新しいパネルを追加にするので、無駄なパネルの生成になります。

void OnDeinit( const int reason )
{
   AppWindow.Destroy( reason );
}

5. ChartEventイベントをAppWindow に渡す

void OnChartEvent( const int    id,
                   const long   &lparam,
                   const double &dparam,
                   const string &sparam)
{
   AppWindow.ChartEvent( id, lparam, dparam, sparam );
}

実行結果

最後に

これで最小限のコードでシンプルなPanelを作ることが出来ます。
ただ勿論Panelを作るだけだと何も出来ません。
次回があれば、ボタンの設置、ボタンイベントなどをやります。
ご意見、ご要望があればコメントください。
お疲れ様。

2020/08/24追記
Youtubeにて動画解説
https://www.youtube.com/watch?v=imVHPZQanWs&list=PLAekJGpx3pyPZJjlnPF_cM0mwNLy5l1Vl&index=2&t=0s
List
https://www.youtube.com/playlist?list=PLAekJGpx3pyPZJjlnPF_cM0mwNLy5l1Vl