Скачать MetaTrader 5

Нужен ли генератор пользовательского интерфейса для программ MQL4/5?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Alexey Volchanskiy
19393
Alexey Volchanskiy  
  • 21%
    (14)
  • 13%
    (9)
  • 21%
    (14)
  • 21%
    (14)
  • 25%
    (17)
Всего проголосовало: 54
Alexey Volchanskiy
19393
Alexey Volchanskiy  
Вчера на вебинаре рассказывал про стандартную библиотеку MQL4/5 в части создания интерфейса, разобрали пример SimplePanel. Кто программирует в современных IDE, понимает, что создание интерфейса вручную на уровне кода - каменный век.
То есть прописывать вот такое руками, это ненужная трата времени, привет началу 90-х :)
//+------------------------------------------------------------------+
//| Create the "Button1" button                                      |
//+------------------------------------------------------------------+
bool CPanelDialog::CreateButton1(void)
  {
//--- coordinates
   int x1=ClientAreaWidth()-(INDENT_RIGHT+BUTTON_WIDTH);
   int y1=INDENT_TOP;
   int x2=x1+BUTTON_WIDTH;
   int y2=y1+BUTTON_HEIGHT;
//--- create
   if(!m_button1.Create(m_chart_id,m_name+"Button1",m_subwin,x1,y1,x2,y2))
      return(false);
   if(!m_button1.Text("Button1"))
      return(false);
   if(!Add(m_button1))
      return(false);
   m_button1.Alignment(WND_ALIGN_RIGHT,0,0,INDENT_RIGHT,0);
//--- succeed
   return(true);
  }
  
Возникла идея сделать генератор интерфейса MQL4/5 на C#. Как сделать - знаю, вопрос в том, нужно ли это комьюнити?
И, кстати, очень мне не нравиться вот такой код в СБ

// in MQL
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnClickButton1(void) // нет инфы, от какого элемента пришел эвент
  {
   m_edit.Text(__FUNCTION__);
  }
//+------------------------------------------------------------------+
//| Event handler                                                    |
//+------------------------------------------------------------------+
void CPanelDialog::OnClickButton2(void)
  {
   m_edit.Text(__FUNCTION__);
  }


Alexey Volchanskiy
19393
Alexey Volchanskiy  
Alexey Volchanskiy:
В том же шарпе можно всегда узнать, от кого пришел евент.


// in C#
private void button1_Click(object sender, EventArgs e) // в C# можно узнать, по какому объекту щелкнули и данные события
{
// что-то делаем
}
George Merts
4099
George Merts  

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

Не думаю, что так уж много народу используют все эти визуальные элементы управления.

Хотя, действительно, было бы интересно иметь визуальный редактор интерфейса...

Alexey Volchanskiy
19393
Alexey Volchanskiy  
George Merts:

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

Не думаю, что так уж много народу используют все эти визуальные элементы управления.

Хотя, действительно, было бы интересно иметь визуальный редактор интерфейса...

Я имел в виду, что я сам это хочу это сделать )) В принципе, уже и начал.
Aleksey Lebedev
6080
Aleksey Lebedev  
Идея замечательная, только неизбежен фатальный недостаток)
Alexander Puzanov
31922
Alexander Puzanov  
Alexey Volchanskiy:
Возникла идея сделать генератор интерфейса MQL4/5 на C#

Не могли бы вы пояснить что за зверь и как должен работать?

 

Alexey Volchanskiy:
И, кстати, очень мне не нравиться вот такой код в СБ

Я думаю "Классы для создания панелей индикации и диалогов управления" были созданы разработчиками чисто для отладки, в том отладочном виде и были засунуты в дистрибутив. И с тех пор длиццо вот это:

George Merts:

Алексей, я думаю, у разработчиков достаточно более насущных проблем

Елементарный пример - чтобы расположить группу радио-боксов не по вертикали а по горизонтали надо весь класс переписать или скопипастить в свой код, а всего-то делов поправить код в 4х строках. И таких костылей надо строгать мин по десятку на каждую средненькую кастомную панель
Alexey Volchanskiy
19393
Alexey Volchanskiy  
Aleksey Lebedev:
Идея замечательная, только неизбежен фатальный недостаток)
Спасибо, посмеялся )) Разница в том, что генератора интерфейса для MQL вроде еще никто не делал. Или я об этом не знаю?
Aleksey Lebedev
6080
Aleksey Lebedev  

Вроде никто не делал, по интерфейсу здесь только статью видел https://www.mql5.com/ru/articles/1867

Alexey Volchanskiy
19393
Alexey Volchanskiy  
Aleksey Lebedev:

Вроде никто не делал, по интерфейсу здесь только статью видел https://www.mql5.com/ru/articles/1867

Хорошая работа, но все же имеются минусы, которые сам автор честно указал. Вы работали с формами в Visual Studio или других современных IDE? Если да, то сами все понимаете. Если нет, вкратце, можно все элементы перемещать на форме мышкой, менять размеры, задавать свойства, например цвет, шрифт. А редактор форм генерит код для компилятора.

------ из статьи -------- 

Плюсы:

  • Код может быть многократно использован: вы можете применять CBox или любой класс компоновки в различных приложениях и диалоговых окнах.
  • Возможность масштабирования: хотя в небольших приложениях исходный код может быть длиннее, преимущества данного способа хорошо видны в более сложных панелях и диалоговых окнах.
  • Сегментация наборов элементов управления позволяет изменить набор элементов управления без значительного влияния на расположение других элементов управления.
  • Автоматическое расположение: не нужно вручную кодировать отступы, зазоры, пространства. Они автоматически рассчитываются классом компоновки.

Минусы:

  • Необходимо создать дополнительные элементы управления для контейнеров, а также требуется создание дополнительных функций для использования этих контейнеров.
  • Меньшая точность: расположение ограничено компоновкой и доступными опциями выравнивания.
  • Могут возникнуть проблемы или сложности, если контейнер содержит элементы управления разных размеров: в этом случае необходимо либо свести разницу в размерах до минимума, либо использовать составные контейнеры.
Sergey Eremin
4443
Sergey Eremin  
Alexey Volchanskiy:
Разница в том, что генератора интерфейса для MQL вроде еще никто не делал. Или я об этом не знаю?

Для нашей команды я такой сделал (на том же шарпе) год назад, не меньше.

Но он для внутреннего пользования. Год назад я не увидел смысла делать публичным: замучают по линии саппорта, а ЦА была ничтожно мала, чтобы иметь с этого реальный профит (ИМХО, конечно). В нашем случае выгоднее казалось просто использовать его для ускорения работы по заказам, что собственно и делаем. Правда переписали заодно и добрую половину контролов (не наследование, а именно переписали из страха что после какого-нибудь апдейта терминала родители подкинут проблем) и дописали некоторых своих.


С интересом понаблюдал бы за становлением публичного и открытого такого продукта (и возможно подключился бы к нему через пару месяцев, сейчас жестоко занят), но что-то мне подсказывает что опенсурсным и Вы не будете его делать ;)

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