Торговая панель глючит при смене таймфрейма.

 

Панель нормально перетаскивается по графику мышкой, все работает, но на второй смене таймфрейма кнопки уезжают от фона, если менять дальше - окно графика закрывается.

Подскажите, пожалуйста, в чем может быть дело?

MT4

 
Ах как жаль что я магический шар отдал во временное пользование на неделю... А то мог-бы и без кода подсказать...
 
По моему, тут ответ совершенно очевиден: панель работает не правильно!
 

Первый раз создавала тему. Надо было сначала в поиск по форуму, есть решение  от Vitalii Ananev 

Если кому-то нужно, вот оно, все работает:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Почему съезжает панель при обновлении настроек эксперта?

Vitalii Ananev, 2016.03.09 07:26

Есть способ решить эту проблему.

class CTradePanel : public CAppDialog
{
private:

public:
                     CTradePanel();
                    ~CTradePanel();
bool isCreate;  //вводите переменную
.....
}

 В методе Create инициализируете ее

 

bool CTradePanel::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);
  isCreate = true;
  return(true);
}

 И в конструкторе и деструкторе

CTradePanel::CTradePanel()
{
   isCreate = false;
}

CTradePanel::~CTradePanel()
{
   isCreate = false;
}

 В самом эксперте или индикаторе в функции OnInit()

   if (!TradeDialog.isCreate)
   {
      if(!TradeDialog.Create(0,"Trade panel",0,10,10,250,150)) return(INIT_FAILED);
      if(!TradeDialog.Run()) return(INIT_FAILED);
   }

 В функции OnDeinit()

void OnDeinit(const int reason)
{
//--- destroy application dialog
   if ((reason != REASON_PARAMETERS) && (reason !=REASON_CHARTCHANGE) && (reason !=REASON_ACCOUNT)) TradeDialog.Destroy(reason);
   
}

 
Alexey Viktorov:
Ах как жаль что я магический шар отдал во временное пользование на неделю... А то мог-бы и без кода подсказать...

Гадаете на хрустальном шаре в свободное от основной работы в аншлаге время?) 

 
Yulia Fedorova:

Первый раз создавала тему. Надо было сначала в поиск по форуму, есть решение  от Vitalii Ananev 

Если кому-то нужно, вот оно, все работает:


Это тоже не всегда срабатывает как надо. Нужно использовать указатели.

CPanelDialog *ExtDialog;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create application dialog
   ExtDialog = new CPanelDialog();
............
}
void OnDeinit(const int reason)
{
//--- destroy application dialog   
   ExtDialog.Destroy(reason);
   if (ExtDialog!=NULL) delete(ExtDialog);  
   
}
 
Vitalii Ananev:

Это тоже не всегда срабатывает как надо. Нужно использовать указатели.

Спасибо!
Причина обращения: