Почему кнопка Pressed не работает Mql5?

 

Вот код:

//+------------------------------------------------------------------+
//|                                 AppWindowCorrectMinimization.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.000"
#property description "Control Panels and Dialogs. Demonstration class CButton"
#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
//+------------------------------------------------------------------+
//| defines                                                          |
//+------------------------------------------------------------------+
//--- indents and gaps
#define INDENT_LEFT                         (11)      // indent from left (with allowance for border width)
#define INDENT_TOP                          (11)      // indent from top (with allowance for border width)
#define CONTROLS_GAP_X                      (5)       // gap by X coordinate
//--- for buttons
#define BUTTON_WIDTH                        (100)     // size by X coordinate
#define BUTTON_HEIGHT                       (20)      // size by Y coordinate
//---
//+------------------------------------------------------------------+
//| Class CControlsDialog                                            |
//| Usage: main dialog of the Controls application                   |
//+------------------------------------------------------------------+
class CAppWindowCorrectMinimization : public CAppDialog
  {
private:
   CButton           m_button1;                       // the button object
   CButton           m_button2;                       // the button object
public:

                     CAppWindowCorrectMinimization(void);
                    ~CAppWindowCorrectMinimization(void);
   //--- create
   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);

   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
   void              print(void);
void PressButtonEvents(const string button_name);
  void ButtonState(const string name,const bool state);
   bool ButtonState(const string name);
protected:
   //--- create dependent controls
   bool              CreateButton1(void);
   bool              CreateButton2(void);
   //--- override the parent method
   virtual void      Minimize(void);
   

  };

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CAppWindowCorrectMinimization)
ON_EVENT(ON_CLICK,m_button1,print)
ON_EVENT(ON_CLICK,m_button2,print)
EVENT_MAP_END(CAppDialog)
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CAppWindowCorrectMinimization::CAppWindowCorrectMinimization(void)
  {
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CAppWindowCorrectMinimization::~CAppWindowCorrectMinimization(void)
  {
  }
//+------------------------------------------------------------------+
//| Create                                                           |
//+------------------------------------------------------------------+
bool CAppWindowCorrectMinimization::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)
  {
   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
      return(false);
//--- create dependent controls
   if(!CreateButton1())
      return(false);
   if(!CreateButton2())
      return(false);
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Global Variable                                                  |
//+------------------------------------------------------------------+
CAppWindowCorrectMinimization ExtDialog;
;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create application dialog
   int x = int(ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS));
   if(!ExtDialog.Create(0,"AppWindowClass with Two Buttons",0,x-280,20,x,324))
      return(INIT_FAILED);
//--- run application

   ExtDialog.Run();
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment("");
//--- destroy dialog
   ExtDialog.Destroy(reason);
  }
  void OnTick()
  {
   int total=ObjectsTotal(0);
   for(int i=0;i<total;i++)
     {
      string obj_name=ObjectName(0,i);
      //if(StringFind(obj_name,prefix+"BUTT_")<0)
      //   continue;
      ExtDialog.PressButtonEvents(obj_name);
     }
  
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
//| Create the "Button1" button                                      |
//+------------------------------------------------------------------+
bool CAppWindowCorrectMinimization::CreateButton1(void)
  {
//--- coordinates
   int x1=INDENT_LEFT;        // x1            = 11  pixels
   int y1=INDENT_TOP;         // y1            = 11  pixels
   int x2=x1+BUTTON_WIDTH;    // x2 = 11 + 100 = 111 pixels
   int y2=y1+BUTTON_HEIGHT;   // y2 = 11 + 20  = 32  pixels
//--- create
   if(!m_button1.Create(0,"Button1",0,x1,y1,x2,y2))
      return(false);
   if(!m_button1.Text("Button1"))
      return(false);
   if(!Add(m_button1))
      return(false);
//--- succeed
   return(true);
  }
//+------------------------------------------------------------------+
//| Create the "Button2"                                             |
//+------------------------------------------------------------------+
bool CAppWindowCorrectMinimization::CreateButton2(void)
  {
//--- coordinates
   int x1=ClientAreaWidth()-100;   // x1 = 11  + 2 * (100 + 5) = 221 pixels
   int y1=INDENT_TOP;                                    // y1                       = 11  pixels
   int x2=x1+BUTTON_WIDTH;                               // x2 = 221 + 100           = 321 pixels
   int y2=y1+BUTTON_HEIGHT;                              // y2 = 11  + 20            = 31  pixels
//--- create
   if(!m_button2.Create(0,"Button2",0,x1,y1,x2,y2))
      return(false);
   if(!m_button2.Text("Button2"))
      return(false);
   if(!Add(m_button2))
      return(false);
//--- succeed
   return(true);
  }



//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CAppWindowCorrectMinimization::Minimize(void)
  {

//--- the minimum indent for a minimized panel
   int x = int(ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS));
   int height=m_min_rect.bottom-m_min_rect.top;
   m_min_rect.right = x;
   m_min_rect.left = x-180;
   m_min_rect.top = 20;
//--- shifting the lower border of the minimized icon
   m_min_rect.bottom=m_min_rect.top+height;
//--- Now we can call the method of the base class
   CAppDialog::Minimize();
  }
//+------------------------------------------------------------------+
void CAppWindowCorrectMinimization::print(void)
{
Print("Button_Clicked");
}
void CAppWindowCorrectMinimization::PressButtonEvents(const string button_name)
  {
   string button=button_name;//StringSubstr(button_name,StringLen(prefix));
   //--- Если кнопка в нажатом состоянии
   if(ButtonState(button_name))
     {
     Print("Pressed");
      //--- Если нажата кнопка BUTT_BUY: Открыть позицию Buy
      if(button=="Button1")//EnumToString(BUTT_BUY))
        {
        Comment(button,"  ",button_name);
        }
      else if(button=="Button2")
        {
        Comment(button,"  ",button_name);
        }
      Sleep(100);
      ButtonState(button_name,false);
      ChartRedraw();
     }
  }

    void CAppWindowCorrectMinimization::ButtonState(const string name,const bool state)
  {
   ObjectSetInteger(0,name,OBJPROP_STATE,state);
  }
  bool CAppWindowCorrectMinimization::ButtonState(const string name)
  {
   return (bool)ObjectGetInteger(0,name,OBJPROP_STATE);
  }

Я попробовал способ @ Артема Тришкина и какой-то другой пример. Но ничего не работает в моем случае.

Пожалуйста, кто-нибудь, помогите мне. Я должен проверить это в тестере стратегий. Но я не могу, так как кнопка не нажимается.

 
jaffer wilson:

Вот код:

Я попробовал способ @ Артема Тришкина и какой-то другой пример. Но ничего не работает в моем случае.

Пожалуйста, кто-нибудь, помогите мне. Я должен проверить это в тестере стратегий. Но я не могу, так как кнопка не нажимается.

Вам несколько раз повторили в других ветках: в тестере стратегий панели на базе CDialog не работают (не обрабатывают события).

 
Vladimir Karputov :

Вам несколько раз повторили в других ветках: в тестере стратегий панели на базе CDialog не работают (не обрабатывают события).

Спасибо за помощь. Никто не говорил мне этого раньше. Я попробую что-то еще тогда.

 
jaffer wilson:

Вот код:

Я попробовал способ @ Артема Тришкина и какой-то другой пример. Но ничего не работает в моем случае.

Пожалуйста, кто-нибудь, помогите мне. Я должен проверить это в тестере стратегий. Но я не могу, так как кнопка не нажимается.

Я Ваш код поправил и выложил здесь исходник. Вам не подошел такой вариант?

В тестере работает по тикам

Событие нажатия кнопки на панели не работает в тестере стратегий MT5
Событие нажатия кнопки на панели не работает в тестере стратегий MT5
  • 2020.04.01
  • www.mql5.com
Вот мой код: Событие нажатия кнопки не работает в тестере стратегий MT5. Тот же код работает в MT4 Strategy Tester...
 
Vasiliy Pushkaryov :

Я Ваш код поправил и выложил здесь исходник. Вам не подошел такой вариант?

В тестере работает по тикам

Я попробовал это, и это похоже на работу. Я проверю вашу библиотеку. Спасибо.

Причина обращения: