Не могу получить кнопку.

 

Создаю свой собственный класс - наследник от CBmpButton. При попытке использовать этот класс в скрипте - я не получаю кнопки, точнее я получаю пустой квадратный контур.

Сам класс:

//+------------------------------------------------------------------+
//|                                                    СontrolsE.mqh |
//+------------------------------------------------------------------+
#include <Controls\BmpButton.mqh>
//+------------------------------------------------------------------+
//| Class CControlsE                                                 |
//+------------------------------------------------------------------+
class CControlsE : public CBmpButton
  {
private:
   int               m_min;               // the minimum value of e
   int               m_max;               // the maximum value of e
public:
                     CControlsE(void);
                    ~CControlsE(void);
   // --- 
   virtual bool      SetMinValue(const int min);
   virtual bool      SetMaxValue(const int max);

  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CControlsE::CControlsE(void)
  {
   m_min=0;
   m_max=100;
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CControlsE::~CControlsE(void)
  {
  }
//+------------------------------------------------------------------+
//| Set the minimum value of equalizer                               |
//+------------------------------------------------------------------+
bool CControlsE::SetMinValue(const int min)
  {
   m_min=min;
   return(true);
  }
//+------------------------------------------------------------------+
//| Set the miaximum value of equalizer                              |
//+------------------------------------------------------------------+
bool CControlsE::SetMaxValue(const int max)
  {
   m_max=max;
   return(true);
  }
//+------------------------------------------------------------------+


А вот скрипт, который использует этот класс:

//+------------------------------------------------------------------+
//|                                                  test_button.mq5 |
//+------------------------------------------------------------------+
#property version   "1.00"
#include "СontrolsE.mqh"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   CControlsE my_button;
   my_button.Create(0,"test_button",0,50,60,100,100);
   Sleep(10000);
  }
//+------------------------------------------------------------------+
 
barabashkakvn:

Создаю свой собственный класс - наследник от CBmpButton. При попытке использовать этот класс в скрипте - я не получаю кнопки, точнее я получаю пустой квадратный контур.

Сам класс:


А вот скрипт, который использует этот класс:

А my_button.BmpNames() вызвать для установки изображений, не надо? :)
На конкурс?

А я по тупости подумал, что нужно свой класс написать. И написал на подножном, громоздко но работает.
Теперь вот думаю, отправлять или не позориться...

 
fyords:

А my_button.BmpNames() вызвать для установки изображений, не надо? :)
На конкурс?

А я по тупости подумал, что нужно свой класс написать. И написал на подножном, громоздко но работает.
Теперь вот думаю, отправлять или не позориться...

Нет. Не на конкурс. Вопрос - почему после наследования не получается кнопка.
 
barabashkakvn:
Нет. Не на конкурс. Вопрос - почему после наследования не получается кнопка.

Наверно по тому, что в родительском классе Create создает объект, а вот чтоб у кнопки был "фон" (это ведь БМПкнопка), нужно вызвать еще и BmpNames() с указанием картинок состояний.

Это нужно делать или в классе потомке или в самой программе. 

 
fyords:

Наверно по тому, что в родительском классе Create создает объект, а вот чтоб у кнопки был "фон" (это ведь БМПкнопка), нужно вызвать еще и BmpNames() с указанием картинок состояний.

Это нужно делать или в классе потомке или в самой программе. 

Я не хочу фон. Хочу обычную кнопку. Ведь когда напрямую создать кнопку как 

CBmpButton MyBmpButton 
не нужно применять рисунок в виде фона - достаточно вызвать метод Create...
 
 barabashkakvn:

Я не хочу фон. Хочу обычную кнопку. Ведь когда напрямую создать кнопку как 

не нужно применять рисунок в виде фона - достаточно вызвать метод Create...

Или я не понимаю или что-то не так.

Если нужна кнопка, простая кнопка, то нужно наследовать от класса CButton. Тогда создается объект  кнопка. 
Если нужна графическая кнопка, то наследуем от CBmpButton. Тогда создается объект Bitmap Label. У него нет серого прямоугольника по умолчанию. Он не виден.

Чтоб его увидеть, нужно на чарте пкм - список объектов - все объекты.

я не получаю кнопки, точнее я получаю пустой квадратный контур.

все правильно, так и должно быть.

 

Мой класс "СontrolsE.mqh ". Это по идеи графическая кнопка наследованная от класса CBmpButton. Раз она наследована от CBmpButton, значит я должен получить вот такую кнопочку

1, но только с двумя моими методами. Но я получаю 2.

 
barabashkakvn:

Мой класс "СontrolsE.mqh ". Это по идеи графическая кнопка наследованная от класса CBmpButton. Раз она наследована от CBmpButton, значит я должен получить вот такую кнопочку

, но только с двумя моими методами. Но я получаю .

Неа, такая кнопочка получится, если наследовать от класс CButton.

А если наследовать от CBmpButton, то получится ровно то, что есть - этот объект графическая метка, а нужна кнопка.

 

Пример из директории "...\MQL5\Experts\Examples\Controls\ControlsDialog.mqh". 

Объявление кнопок -

//+------------------------------------------------------------------+
//| Class CControlsDialog                                            |
//| Usage: main dialog of the Controls application                   |
//+------------------------------------------------------------------+
class CControlsDialog : public CAppDialog
  {
private:
   CEdit             m_edit;                          // the display field object
   CButton           m_button1;                       // the button object
   CButton           m_button2;                       // the button object


Действительно, класс CButton. Вот это я дал. Всё получилось и наследование и добавление методов :).

 
barabashkakvn:

Действительно, класс CButton. Вот это я дал. Всё получилось и наследование и добавление методов :).

Уря. Я рад :)
 
fyords:
Уря. Я рад :)
Спасибо за помощь. Теперь можно спокойно идти спать.
Причина обращения: