パネルやダイアログを作成するためのクラス - ページ 3

 
Slawa:

どのような症状なのでしょうか?

Dimitriは サブウィンドウ(indicator_separate_window)にあるインジケータのGUIを、メインチャートウィンドウに作成する必要があります。
 
Dmitry Fedoseev:
だから

とにかく、私もちょっと困っているんです。) このモード、すなわち「サブウィンドウにインジケータを配置し、そのGUIをメインチャートウィンドウに 表示する」モードは、これまで私のライブラリではテストされていませんでした。現在、小さなバグがあり、閉じるボタンを押してもインジケータを削除できないこと、またサブウィンドウに他のインジケータを配置/削除した後にサブウィンドウ番号を決定すると衝突するため、いくつかのケースで間違ったイベントハンドリングになって しまうことがあるそうです。

このモードのためにライブラリを改良する予定ですが、もう少し後、これは将来のバージョンで利用できるようになります。さまざまなシチュエーションで入念にテストする必要があるため、しばらく時間がかかると思います。

代替案として、すでにテストされ動作しているものから、以下のものを提案することができます。インジケーターサブウィンドウには、様々な方法でインジケーターパネルを配置することができます。以下のスクリーンショットのように、(1)インジケーターサブウィンドウと一緒にパネルを最小化するモード、(2)インジケーターサブウィンドウに触れずにパネルのみを最小化するモード、があります。サブウィンドウは、(1)高さ固定、(2)手動で自由に大きさを変更可能です。しかし、この場合にも一つの制約があります。グラフ上にグラフィカルなインターフェイスを持つMQLアプリケーションは1つしか存在できない。そうでなければ、コンフリクトが発生します。

//---

提案されたオプションが適切であれば、テンプレートを用意するつもりです。そうでない場合は、残念ながら、お力になれません。

テスト用のファイルはアーカイブにあります。

ファイル:
Test.zip  8 kb
 
Slawa:

何も不具合はない。どのような症状なのでしょうか?

今、試してみました。まずサブウインドウにインジケータを表示します。続いて、チャートのパネル。そして、サブウィンドウに同様のパネルが表示されます。最初のサブウィンドウにSimplePanel2が表示されただけでした。でも、操作に支障はないんです。すべてのボタンが正しく押される。

SimplePanel2とSimplePanelの違いはindicator_chart_windowプロパティのみです。

グラフウィンドウのSimplePanelを作り直してみましたが、こちらも問題なく動作しています。サブウィンドウとチャート上、サブウィンドウが通常のインジケータである場合、どちらも動作します。しかし、SimplePanel(価格チャート上とサブウィンドウの両方)、そしてサブウィンドウで標準のインディケータを実行すると、価格チャート上にあるパネルが不具合を起こします。ウィンドウは最小化され、展開しようとすると、一瞬展開し、また最小化されます。

私のは、サブウインドウに標準のインジケータを追加すると不具合が発生します。以下は、インクルードファイルのコードです。

#include <Controls\Dialog.mqh>
#include <Controls\Edit.mqh>
#include <Controls\ComboBox.mqh>
#include <Controls\Label.mqh>

#define INDENT 11
#define LINE   20

class CPanTest:public CAppDialog{
   protected:
      CComboBox         m_cmb_main;
      CEdit             m_edit1;
      void OnMainEvent(){
      }    
      void OnControlEvent(){
      }        
   public:
      bool Create(){
         if(!CAppDialog::Create(0,"name",0,20,20,200,300)){
            return(false);  
         }
         return(true);    
      }  
      bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
};

EVENT_MAP_BEGIN(CPanTest)
   ON_EVENT(ON_CHANGE,m_cmb_main,OnMainEvent)
   ON_EVENT(ON_END_EDIT,m_edit1,OnControlEvent)
EVENT_MAP_END(CAppDialog)

指標となる。

#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

#include <CPanTest.mqh>

CPanTest * pan;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   pan=new CPanTest();
   if(!pan.Create()){  
      return(INIT_FAILED);
   }
   if(!pan.Run()){
     return(INIT_FAILED);  
   }  
   return(INIT_SUCCEEDED);
}

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

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   return(rates_total);
}

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

とにかく、私もちょっと困っているんです。) このモード、つまり「サブウィンドウにインジケータ、メインチャートウィンドウにそのGUI」というのは、私のライブラリでは以前からテストされておらず、現在、小さなバグがあり、閉じるボタンを押してもインジケータを削除できない、また、サブウィンドウに他のインジケータを配置/削除した後にサブウィンドウ番号を決める際に衝突があり、いくつかのケースで誤ったイベント処理が 行われるようになってしまっています。

このモードのためにライブラリを改良する予定ですが、もう少し後、これは将来のバージョンで利用できるようになります。さまざまなシチュエーションで入念にテストする必要があるため、しばらく時間がかかると思います。

代替案として、すでにテストされ動作しているものから、以下のものを提案することができます。インジケーターバーは、インジケーターサブウィンドウ内に様々な方法で配置することができます。以下のスクリーンショットのように、(1)インジケーターサブウィンドウと一緒にパネルを最小化するモード、(2)インジケーターサブウィンドウに触れずにパネルのみを最小化するモード、があります。サブウィンドウは、(1)高さ固定、(2)手動で自由に大きさを変更可能です。しかし、この場合にも一つの制約があります。グラフ上にグラフィカルなインターフェイスを持つMQLアプリケーションは1つしか存在できない。そうでなければ、コンフリクトが発生します。

//---

提案されたオプションが適切であれば、テンプレートを用意するつもりです。そうでない場合は、残念ながら、お力になれません。

テスト用のファイルはアーカイブにあります。

ポドックに入れましょう。サブウィンドウの中で自由にぶら下がり、サブウィンドウから独立して折りたため、サブウィンドウを拡大縮小できること。
 
Dmitry Fedoseev:
サブウインドウにする。サブウィンドウの中で自由にぶら下がること、サブウィンドウから独立して折りたたむこと、サブウィンドウがスケーラブルであること。

アーカイブの中にテンプレートファイルがあります。何か質問があれば、お答えします。

ファイル:
Test.zip  4 kb
 
Anatoli Kazharski:

アーカイブの中にテンプレートファイルがあります。何か質問があれば、お答えします。

間違いがあったようです。

 
Dmitry Fedoseev:

間違いがあったようです。

ああ、もう次のバージョンに向けた変更が進んでいるんだ。全部同じにします。)

前回記事からのバージョンに修正しました。もうひと頑張り。

ファイル:
Test.zip  4 kb
 
Anatoli Kazharski:

ああ、もう次のバージョンに向けた変更が進んでいるんだ。すべてを同じにすること。)

前回記事からのバージョンに修正しました。もうひと頑張り。

え...もうちょっとリソースが足りないというエラーが多発するようになりました。
 
Dmitry Fedoseev:
え...もうちょっと今は、リソースが足りないというエラーが多発しています。
図書館で使用した資料は、連載の最終回にすべて添付しています。ログメッセージはどのようなものですか?
 
Anatoli Kazharski:
図書館で使用した資料はすべて連載の最終回に添付しています。 ログブックに書かれているメッセージは何ですか?
不足しているリソースに関するメッセージ。