Обсуждение статьи "Создай свои графические панели на MQL5"

 

Опубликована статья Создай свои графические панели на MQL5:

Удобство пользования MQL5-программой определяется не только её богатой функциональностью, но и продуманным графическим интерфейсом. Визуальное восприятие иногда гораздо важнее, чем быстрая и стабильная работа. Перед вами пошаговое руководство по самостоятельному созданию индикаторных панелей на основе классов Стандартной библиотеки.


Автор: MetaQuotes

 

На данный момент библиотека заточена под одну панель на графике.

Если попытаться влепить 2, то некорректно отлавливаются события - у элементов одинаковые Id, а родительский Id не проверяется.

Для проверки взял демонстрационный Controls.mq5 и продублировал панель - все события дублируются на обе панели, хотя не должны.

Файлы:
 
В пункте "Наполняем панель индикации" можно вместо
CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))
 использовать что то вроде 
ObjCAppDialog.Create(chart,name,subwin,x1,y1,x2,y2))
?
 
Rorschach:
В пункте "Наполняем панель индикации" можно вместо  использовать что то вроде ?

Доброго дня, может подскажите что сделать.

Ваш пример експерт Controls.

При переключении на другой период эксперт выгружается, пробовал убрать ExtDialog.Destroy(reason); в OnDeinit().

Подскажите что необходимо сделать, что бы окно диалога продолжало работать при переходе на другие периоды. 

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
vdv2001:

Доброго дня, может подскажите что сделать.

Ваш пример експерт Controls.

При переключении на другой период эксперт выгружается, пробовал убрать ExtDialog.Destroy(reason); в OnDeinit().

Подскажите что необходимо сделать, что бы окно диалога продолжало работать при переходе на другие периоды. 

Большое спасибо за замечание. Ошибка исправлена. Обновление в след. билде.
 

ИМХО, я считаю что легче создать библиотеки собственноручно, чтобы знать что где и как нужно использовать или исправить если что не так. 

Пример написания панели без использования стандартных классов.: VirtualTradePad PositionsStyle 

 

 

Обратил внимание что в библиотеке пользовательских графический интерфейсов (панелей) копируется не совсем удачная на мой взгляд событийная модель:

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

Во первых, далеко не все события имеют набор переменных соответствующих int, long, double и string. Где-то переменных описывающих событие может быть больше, где-то меньше, где-то они не совпадают с предложенными базовыми типами. По факту мы видим постоянную конвертацию вроде int -> bool, string -> int, double -> int и т.д. И если с точки зрения процедурного программирования практически ничего сделать нельзя (ведь не будешь создавать 1 000 000 перегруженных функций для каждого гипотетического случая), то в рамках ООП все можно сделать гораздо проще и изящней.

Но главная проблема OnEvent в том, что этот обработчик событий призван обрабатывать события получаемые с графика, в то время как событие может быть каким угодно, например открытие новой позиции, или изменение котировок. В общем OnEvent(...) как-то выглядит не достаточно универсальным обработчиком событий, ИМХО. Возможно разработчики как-то приловчились обрабатывать свои собственные события на базе существующего CWnd , но для меня использования стандартной библиотеки панелей видится пока проблемным.

Как использовать торговые классы Стандартной библиотеки при написании советника
Как использовать торговые классы Стандартной библиотеки при написании советника
  • 2010.11.10
  • Samuel
  • www.mql5.com
В статье рассказывается о том, как использовать основной функционал торговых классов Стандартной библиотеки при написании советников, в которых применяется открытие, закрытие и модификация позиции, проверка свободной маржи перед размещением торговых ордеров, размещение и удаление отложенных ордеров. Показано, как использовать торговые классы для получения свойств ордеров и сделок.
 

спасибо, изучил, полезно! несколько моментов: планируется ли создание какого-нибудь конструктора, что бы панели можно было собирать в конструкоторе форм как в VS? т.к. считать всё руками как-то не совсем удобно, может это и ялвяется признаком профессионализма, НО долго ))

с макросами явно перемудрили... 

 

Хотел все, так сказать, методом тыка на примере Controls.mq5 изучить. Уже и так и сяк пытался поменять название кнопок.

   if(!m_button2.Create(m_chart_id,m_name+"Button2222",m_subwin,x1,y1,x2,y2))
      return(false);
   if(!m_button2.Text("Buy"))
      return(false);

Пытался поменять вывод в m_Edit, менял #define BUTTON_WIDTH . Перезагружал терминал, обновлял скрипты в навигаторе. 

void CControlsDialog::OnClickButton3(void)
  {
   if(m_button3.Pressed())
      m_edit.Text(__FUNCTION__+"Test");
   else
      m_edit.Text(__FUNCTION__+"I td");

  Но ничего не помогает. При разных изменениях вид советника вообще не изменяется. Подскажите в чем проблема, пожалуйста 

 
предложение на будующее... сделать класс (объект) "выпадающий календарь"
 
thejobber:
предложение на будующее... сделать класс (объект) "выпадающий календарь"

так есть уже такой - CDatePicker, см. в стандартной библиотеке

Причина обращения: