Инициализация 2 CAppDialog

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

Имеется класс CAppWindowMain : public CAppDialog

В нем прописана структура окна, куча контролов и т.д.

Инициализирую окно, все отлично:

if(!ExtDialog.Create(0,"Торговая панель",0,40,40,DEFAULT_WIDTH,344))
      return(INIT_FAILED);
   ExtDialog.Run();

Пример окна

Все перемещается, работает.

Создаю второй класс, наследуюсь от CAppDialog.

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

if(!ExtDialogReview.Create(0,"Вторая панель",0,40,40,DEFAULT_WIDTH,344))
      return(INIT_FAILED);
   ExtDialogReview.Run();

Ошибка исчезает. Вопрос в чем - можно создать только одну форму на вкладке? Или я что-то не так делаю?

Ihor Herasko
21905
Ihor Herasko  

Наверное, что-то у Вас в наследовании не так. Проверил, все работает:

#property strict

#property indicator_chart_window

#include "Examples\\SimplePanel\\PanelDialog.mqh"

CPanelDialog m_classFirstPanel;
CPanelDialog m_classSecondPanel;

int OnInit(void)
{
   if (!m_classFirstPanel.Create(0, "First", 0, 10, 10, 410, 410))
      return INIT_FAILED;
   m_classFirstPanel.Run();
      
   if (!m_classSecondPanel.Create(0, "Second", 0, 420, 10, 820, 410))
      return INIT_FAILED;
   m_classSecondPanel.Run();

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   m_classFirstPanel.Destroy(reason);
   m_classSecondPanel.Destroy(reason);
}

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)
{
   m_classFirstPanel.ChartEvent(id,lparam,dparam,sparam);
   m_classSecondPanel.ChartEvent(id,lparam,dparam,sparam);
}

Вот результат (клик на рисунке):


Кнопки только в разных панелях нужно по-разному назвать, чтобы не было реакции на объекты другой панели.
firsalex
90
firsalex  

О да, заработало :)

Причина была на самом деле вот в чем:

У меня 2 класса, и я в обоих объявлял EVENT_MAP_BEGIN и "virtual bool OnEvent". В итоге и происходили конфликты.


Спасибо.

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