7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2019-11-30

noteにて更に詳しく解説!
https://note.com/iceseeds/n/nfdae2c5ac2ef

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 );
}

実行結果

Screenshot_9.png

最後に

これで最小限のコードでシンプルな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

7
7
12

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?