Скачать MetaTrader 5

Вопрос по использованию классов CButton и CCheckBox

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexander Uvizhev
32
Alexander Uvizhev  

Всем привет.

Хотел сделать простой контроллер для индикатора в виде кнопки или чекбокса. Нашел в стандартной библиотеке классы CButton и CCheckbox и попытался их использовать. И кнопка и чекбокс нормально отрисовываются прям на графике, но почему-то не реагируют на события OnMouseDown (кнопка) и OnClickButton/OnClickLabel.

Вопрос, что я делаю не так?

 Делаю примерно так:

#include <Controls\CheckBox.mqh>

class MyCheckBox : public CCheckBox {
    public:
    bool OnClickButton(void) {
        if(this.Checked() == true) {
            Print("Checkbox ON");
        }
        else if(this.Checked() == false) {
            Print("Checkbox OFF");
        }
        return(true);
    }
};

MyCheckBox check;

void OnInit() {
    check.Create(0,"Checkbox test",0,10,20,150,40);
}
Vladimir Karputov
Модератор
75853
Vladimir Karputov  
А как Вы пытаетесь обработать событие события OnMouseDown (кнопка)?
Petros Shatakhtsyan
11666
Petros Shatakhtsyan  
uvizhe:

Всем привет.

Хотел сделать простой контроллер для индикатора в виде кнопки или чекбокса. Нашел в стандартной библиотеке классы CButton и CCheckbox и попытался их использовать. И кнопка и чекбокс нормально отрисовываются прям на графике, но почему-то не реагируют на события OnMouseDown (кнопка) и OnClickButton/OnClickLabel.

Вопрос, что я делаю не так?

 Делаю примерно так:

То что вы нашли, это новость для меня. Я даже не подозревал, что в MQL5 можно будет использовать классы, как в MFC, Visual C++.

Я например для этого использую:

ObjectCreate(0,"XXXXXX",OBJ_BUTTON,0,0,0); 

void OnChartEvent(const int id,  const long &lparam,  const double &dparam,  const string &sparam) 

Petros Shatakhtsyan
11666
Petros Shatakhtsyan  

barabashkakvn:


Я забыл сказать, что ваш тест я выполнил. 

Vladimir Karputov
Модератор
75853
Vladimir Karputov  

OnClickButton - это защищённый метод родительского класса. Вот код из CheckBox.mqh:

   //--- methods for working with files
   virtual bool      Save(const int file_handle);
   virtual bool      Load(const int file_handle);

protected:
   //--- create dependent controls
   virtual bool      CreateButton(void);
   virtual bool      CreateLabel(void);
   //--- handlers of the dependent controls events
   virtual bool      OnClickButton(void);
   virtual bool      OnClickLabel(void);
  };
//+------------------------------------------------------------------+
//| Common handler of chart events                                   |
//+------------------------------------------------------------------+
Alexander Uvizhev
32
Alexander Uvizhev  
barabashkakvn:

OnClickButton - это защищённый метод родительского класса. Вот код из CheckBox.mqh:

Ага, точно! Спасибо, я что-то не обратил внимание. Значит, это вообще как-то иначе делается.

Я сейчас нашел способ обработки событий через OnChartEvent() и в случае с моим примером это будет выглядеть как-то так:

void OnChartEvent(const int id,
                  const long& lparam,
                  const double& dparam,
                  const string& sparam)
{
    if(id == CHARTEVENT_OBJECT_CLICK && sparam == "Checkbox testButton") {
        // Тут какой-то код
    }
}

 Но я все-таки не понимаю, зачем тогда нужны эти обработчики OnClickButton() и OnClickLabel() и как их использовать.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Vasiliy Aseev
290
Vasiliy Aseev  

Не пробовал переопределись метод OnClickButton в своем объекте? 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий