用于创建面板和对话的类 - 页 3

 
Slawa:

症状是什么?

Dimitri需要在主图表窗口中创建指标的GUI, 在一个子窗口(indicator_separate_window)中。
 
Dmitry Fedoseev:
所以

总之,我也有一个小问题。)这种模式,即"指标在子窗口中,其图形用户界面在主图表窗口中",以前没有在我的库中测试过,现在有一个小错误,导致无法通过按关闭按钮来删除指标,而且在子窗口中放置/删除其他指标后,在确定子窗口编号方面也有冲突,这导致在某些情况下事件处理 不正确。

我将完善这种模式的库,但要晚一点,这将在未来的版本中提供。这将需要一些时间,因为我们需要在不同情况下仔细测试一切。

作为一个替代方案,我可以根据已经测试过的情况提出以下建议,并能发挥作用。你可以用各种方式将指标栏放在指标子窗口中。有几种模式,你可以最小化面板(1)与指示器子窗口一起,或(2)只有面板而不接触指示器子窗口,如下面的截图所示。子窗口可以是(1)固定高度或(2)自由地手动调整大小。但即使在这种情况下,也有一个限制。图上只能有一个带有图形界面的MQL-应用程序。否则,就会有冲突。

//---

如果建议的方案是合适的,我将准备模板。如果没有,那么,不幸的是,我无法帮助你。

测试用的文件在档案中。

附加的文件:
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:

总之,我也有一个小问题。)这种模式,即"指标在子窗口中,其图形用户界面在主图表窗口中",早先在我的库中没有测试过,现在有一个小错误,导致无法通过按关闭按钮来删除指标,而且在子窗口中放置/删除其他指标后,在确定子窗口编号方面也有冲突,这导致某些情况下的事件处理 不正确。

我将完善这种模式的库,但要晚一点,这将在未来的版本中提供。这将需要一些时间,因为我们需要在不同情况下仔细测试一切。

作为一个替代方案,我可以根据已经测试过的情况提出以下建议,并能发挥作用。你可以用各种方式将指标栏放在指标子窗口中。有几种模式,你可以最小化面板(1)与指示器子窗口一起,或(2)只有面板而不接触指示器子窗口,如下面的截图所示。子窗口可以是(1)固定高度或(2)自由地手动调整大小。但即使在这种情况下,也有一个限制。图上只能有一个带有图形界面的MQL-应用程序。否则,就会有冲突。

//---

如果建议的方案是合适的,我将准备模板。如果没有,那么,不幸的是,我无法帮助你。

测试用的文件在档案中。

让它在podoc。它应该在子窗口中自由悬挂,独立于子窗口而折叠,并且子窗口可以被缩放。
 
Dmitry Fedoseev:
让它在子窗口中。子窗口应该在子窗口中自由悬挂,独立于子窗口折叠,而且子窗口应该是可扩展的。

档案里有一个模板文件。如果你有任何问题,我会回答。

附加的文件:
Test.zip  4 kb
 
Anatoli Kazharski:

档案里有一个模板文件。如果你有任何问题,我会回答。

有一个混淆的问题。

 
Dmitry Fedoseev:

有一个混淆的问题。

哦,我已经在为下一个版本进行修改了。我会让他们都一样的。)

对上一篇文章中的版本进行了更正。再试一试。

附加的文件:
Test.zip  4 kb
 
Anatoli Kazharski:

哦,我已经在为下一个版本进行修改了。让一切都回到原点。)

对上一篇文章中的版本进行了更正。再试一试。

呃...还有一些...现在有很多关于缺少资源的错误。
 
Dmitry Fedoseev:
呃...还有一些...现在有很多关于缺少资源的错误。
图书馆中使用的所有资源都附在该系列的最后一篇文章中。日志信息是什么?
 
Anatoli Kazharski:
图书馆中使用的所有资源都附在该系列的最后一篇文章中。 记录本上的信息是什么?
关于缺失资源的信息。