Классы для создания панелей и диалогов - страница 3

 
Slawa:

Какие симптомы?

Дмитрию нужно, чтобы графический интерфейс индикатора, который находится в подокне (indicator_separate_window), создавался в главном окне графика.
 
Dmitry Fedoseev:
Так

В общем, у меня тоже проблемка небольшая обнаружилась. ) Этот режим, то есть "индикатор в подокне, а его графический интерфейс в главном окне графика", ранее не был протестирован в моей библиотеке и сейчас обнаружился небольшой баг, из-за которого не получалось удалить индикатор нажатием на кнопку закрытия, а также возникает конфликт при определении номера подокна после размещения/удаления других индикаторов в подокнах, что приводило к неправильной обработке событий в некоторых случаях.

Я доработаю библиотеку под этот режим, но чуть позже и это будет доступно в одной из следующих версий. Это займёт какое-то время, так как нужно всё внимательно протестировать в разных ситуациях.

В качестве альтернативного варианта могу предложить следующее из того, что уже протестировано и работает. Разместить панель индикатора в подокне индикатора можно различными способами. При этом есть несколько режимов, когда можно сворачивать панель (1) вместе с подокном индикатора или (2) только панель не трогая подокно индикатора, как показано на скриншотах ниже. Подокно может быть (1) фиксированной высоты или (2) свободно для изменений размера вручную. Но и в этом случае пока есть одно ограничение. На графике может быть только одно MQL-приложение с графическим интерфейсом. Иначе будут возникать конфликты.

//---

Если предложенные варианты подходят, то я тогда подготовлю шаблоны. Если нет, то, к сожалению, пока больше помочь ничем не могу.

В архиве файлы для тестов: 

Файлы:
Test.zip  8 kb
 
Slawa:

Ничего не глючит. Какие симптомы?

Я только что попробовал. Сначала индикатор в подокне. Потом Панель на график. Потом аналогичная панель в подокне. Единственно, что увидел надпись SimplePanel2 в первом подокне. Но на работу не влияет. Все кнопки нажимаются правильно

Единственно, чем отличается SimplePanel2 от SimplePanel, это пропертью indicator_chart_window

Попробовал переделать SimplePanel для окна графика, тоже нормально работает. Обе работают, в подокне и на графике и когда в подокне обычный индикатор. А вот когда обе SimplePanel (на графике цены и в подокне), то при запуске стандартного индикатора в подокне, панель которая на графике цены глючит - окно сворачивается, при попытке развернуть, на мгновение разворачивается и снова сворачивается.

Моя глючит при добавлении стандартного индикатора в подокно. Вот код включаемого файла:

#include <Controls\Dialog.mqh>
#include <Controls\Edit.mqh>
#include <Controls\ComboBox.mqh>
#include <Controls\Label.mqh>

#define INDENT 11
#define LINE   20

class CPanTest:public CAppDialog{
   protected:
      CComboBox         m_cmb_main;
      CEdit             m_edit1;
      void OnMainEvent(){
      }    
      void OnControlEvent(){
      }        
   public:
      bool Create(){
         if(!CAppDialog::Create(0,"name",0,20,20,200,300)){
            return(false);  
         }
         return(true);    
      }  
      bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);
};

EVENT_MAP_BEGIN(CPanTest)
   ON_EVENT(ON_CHANGE,m_cmb_main,OnMainEvent)
   ON_EVENT(ON_END_EDIT,m_edit1,OnControlEvent)
EVENT_MAP_END(CAppDialog)

Индикатор:

#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots   0

#include <CPanTest.mqh>

CPanTest * pan;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   pan=new CPanTest();
   if(!pan.Create()){  
      return(INIT_FAILED);
   }
   if(!pan.Run()){
     return(INIT_FAILED);  
   }  
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason){
   pan.Destroy();
   delete(pan);
}  

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


 

 
Anatoli Kazharski:

В общем, у меня тоже проблемка небольшая обнаружилась. ) Этот режим, то есть "индикатор в подокне, а его графический интерфейс в главном окне графика", ранее не был протестирован в моей библиотеке и сейчас обнаружился небольшой баг, из-за которого не получалось удалить индикатор нажатием на кнопку закрытия, а также возникает конфликт при определении номера подокна после размещения/удаления других индикаторов в подокнах, что приводило к неправильной обработке событий в некоторых случаях.

Я доработаю библиотеку под этот режим, но чуть позже и это будет доступно в одной из следующих версий. Это займёт какое-то время, так как нужно всё внимательно протестировать в разных ситуациях.

В качестве альтернативного варианта могу предложить следующее из того, что уже протестировано и работает. Разместить панель индикатора в подокне индикатора можно различными способами. При этом есть несколько режимов, когда можно сворачивать панель (1) вместе с подокном индикатора или (2) только панель не трогая подокно индикатора, как показано на скриншотах ниже. Подокно может быть (1) фиксированной высоты или (2) свободно для изменений размера вручную. Но и в этом случае пока есть одно ограничение. На графике может быть только одно MQL-приложение с графическим интерфейсом. Иначе будут возникать конфликты.

//---

Если предложенные варианты подходят, то я тогда подготовлю шаблоны. Если нет, то, к сожалению, пока больше помочь ничем не могу.

В архиве файлы для тестов: 

Пусть в подоке будет. Что бы свободно болталась в подокне, сворачивалась независимо от подокна, а подокно можно было масштабировать. 
 
Dmitry Fedoseev:
Пусть в подоке будет. Что бы свободно болталась в подокне, сворачивалась независимо от подокна, а подокно модно было масштабировать. 

В архиве файл с шаблоном. Если будут вопросы, отвечу. 

Файлы:
Test.zip  4 kb
 
Anatoli Kazharski:

В архиве файл с шаблоном. Если будут вопросы, отвечу. 

Неувязочка случилась:

 

 
Dmitry Fedoseev:

Неувязочка случилась:

А, у меня же тут уже изменения идут для следующей версии. Привожу всё к единообразию. )

Поправил под версию из последней статьи. Ещё одна попытка. 

Файлы:
Test.zip  4 kb
 
Anatoli Kazharski:

А, у меня же тут уже изменения идут для следующей версии. Привожу всё к единообразию. )

Поправил под версию из последней статьи. Ещё одна попытка. 

Эх... еще немного... Теперь очень много ошибок об отсутствии ресурсов.
 
Dmitry Fedoseev:
Эх... еще немного... Теперь очень много ошибок об отсутствии ресурсов.
Все ресурсы используемые в библиотеке приложены к последней статье серии. Какие сообщения в журнале?
 
Anatoli Kazharski:
Все ресурсы используемые в библиотеке приложены к последней статье серии. Какие сообщения в журнале?
Сообщения об отсутствии ресурсов.