Краудсорсовый GUI. Открытое бета-тестирование.

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

Предлагаю сообществу конструктор GUI для MQL-программ для свободного использования.  

  • Конструктор GUI отдаю закрытым файлом .ex5, с целью централизовать его развитие и исключить путаницу при распостранении версий. 
  • Движок GUI присоеденяю открытым файлом .mqh, НО! - Не рекомендую менять код по своему усмотрению, без консультации со мною, т.к. это может привести к ошибкам и потере функциональности.
  • Прошу сообщать о багах и недоработках. 

 За конструктивное участие.

P.S. Проект краудсорсовый, а значит мы реализуем его вместе.

//-----------------------------------------------------------------------------------------------------------------

СБОРКА:

  • Советник KIB.ex5                  - конструктор GUI.
  • Файл GUI_DRIVE.mqh            - движок GUI в пользовательском приложении. Подключается файлом.
  • Индикатор KIB-source.mqh   - передатчик разметочного кода из файлов польз.проекта в конструктор.

ИНСТРУКЦИЯ К УСТАНОВКЕ:

Шаг 1 - распаковка:

  • Советник KIB.ex5 поместить в папку Экспертов. (Не помещать в подпапки).
  • Файл GUI_DRIVE.mqh поместить в папку include. (Не помещать в подпапки).
  • Индикатор KIB-source.mqh поместить в папку Indicators. (Не помещать в подпапки).

Шаг 2 - установка файлов:

  • Установить советник KIB.ex5 на свободный график.
  • Открыть индикатор KIB-source.mqh в редакторе Метаэдитор и скомпилировать для получения файла .ex5.
  • Полученный файл KIB-source.ex5 установить на тот же график, где находится советник KIB.ex5.

Шаг 3 - подготовка к работе:

  • Создать папку "MyProjects" для своего нового проекта GUI внутри папки include.  
  • Создать файл Window_1.mqh для написания разметки. Открыть этот файл.
  • Прописать подключение этого файла внизу KIB-source.mqh внутри инициализации массива "source" (#include <MyProjects\Window_1.mqh>).

Шаг 4 - начало работы:

  • Написать простейший код:

//----------------------------------------------------------------------------------
NEW_WINDOW,  W_NAME, " Hello World! ",  W_ICON, "::Images\\16x16\\Folder.bmp",  W_TYPE, SETTINGS, ALWAYS_ON_TOP,
//----------------------------------------------------------------------------------
GROUP, "Кнопка",

__,BUTTON, "Hello World!",

END_GROUP,
//--------------------------
i, AT, _X2X, "MF", 10, _Y2Y, "MF", 10,
//----------------------------------------------------------------------------------
END_WINDOW,

  • Скомпилировать файл KIB-source.mqh. На графике должно отобразится окно с кнопкой.

Шаг 5 - проектирование пользовательского GUI:

  • В дополнительной ветке, будут предоставлены обучающие материалы и примеры кода, которые помогут создать нужный графический интерфейс.

Шаг 6 - сохранение пользовательского GUI:

  • Вызвать дабл-кликом на график контекстное меню конструктора. 
  • Выбрать последний пункт "Save project and print API file".
  • В папке "Files" сохранятся два файла: "CORES.mqh" и "Internal_API.mqh". 
  • Вручную перенести эти файлы внутрь папки MyProjects из папки "Files".
  • Проект сохранен.

Шаг 7 - подключение пользовательского GUI к советнику:

//+------------------------------------------------------------------+
//|                                                   GUI Expert.mq5 |
//|                                                      Peter Konow |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Peter Konow"
//--------------------------------------------------------------------
#include<GUI_DRIVE.mqh>
#include<MyProject_1\CORES.mqh>
#include<MyProject_1\Internal_API.mqh> 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- create timer
   EventSetMillisecondTimer(25);
   //-------------------------
   D_OnInit();
   //-------------------------
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   //-------------------------
   D_OnDeinit();
   //-------------------------
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //ВАШ КОД-----------------
   //УСТАНОВИТЬ ВЫЗОВ В САМОМ НИЗУ, ПОД ПОЛЬЗ.КОДОМ.------------------
   //---------------------------
   RMSG(1);
   //---------------------------
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   //УСТАНОВИТЬ ВЫЗОВ НА САМОМ ВЕРХУ, НАД ПОЛЬЗ.КОДОМ.---------------
   //----------------------------------------------------------------
   D_OnChartEvent(id,lparam,dparam,sparam);
   //----------------------------------------------------------------
  }
//+------------------------------------------------------------------+


Шаг 8 - получение событий от элементов управления:

  • События приходят в функцию внутри файла "Internal_API.mqh".

//========================================================================================================= 
void On_Gui_Event(int Element, string value, double Magic = 0)
{
 string action = value, selected_option = value; //DON'T CHANGE THIS LINE
//------------------------------------
 switch(Element)
   {
//=====================================================================================================================
//WINDOW:   Checkboxes | element: CHECKBOX  | name: Checkbox 1  |  Location: Window's Main Frame
//=====================================================================================================================
case CHECKBOX3___Checkbox_1:
               //------------------------------------------------------------------------------------------------------
               //What to do when checkbox checked or unchecked?
               //------------------------------------------------------------------------------------------------------
               switch((int)action)
               {
                case checked:     break;
  
                case unchecked:     break;
               }
               //------------------------------------------------------------------------------------------------------
               //Your comment:
               //------------------------------------------------------------------------------------------------------
               break;
  
...

  • Прописать в ее кейсах нужные реакции пользовательского функционала.


ЗЫ. В блоге есть скомпилированная версия конструктора с интегрированными ресурсами : https://www.mql5.com/ru/blogs/post/733356

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

Документация по MQL5: Операции с массивами / ArrayInitialize
Документация по MQL5: Операции с массивами / ArrayInitialize
  • www.mql5.com
Функция ArrayResize() позволяет задать для массива размер с некоторым запасом для его будущего увеличения без физического перераспределения памяти. Это сделано для улучшения быстродействия, так как операции по распределению памяти...
Файлы:
KIB-source.mq5 132 kb
GUI_DRIVE.mqh 2013 kb
KIB.zip 1470 kb
Vladimir Karputov
Модератор
180740
Vladimir Karputov  

Закрытый код -> Маркет.

Открытый код -> Форум.

Реter Konow
8667
Реter Konow  
Vladimir Karputov:

Закрытый код -> Маркет.

Открытый код -> Форум.

Хорошо. Я опубликую открытый код конструктора. Но, мне нужно пара дней на его причесывание. Согласитесь подождать?

Vladimir Karputov
Модератор
180740
Vladimir Karputov  
Реter Konow:

Хорошо. Я опубликую открытый код конструктора. Но, мне нужно пара дней на его причесывание. Согласитесь подождать?

Ваша теме никуда не денется.

Dmitriy Skub
12002
Dmitriy Skub  
"Шо? Опять?!))
Aleksei Beliakov
47413
Aleksei Beliakov  
Dmitriy Skub:
"Шо? Опять?!))
Ещё не причесали, погодь
Vladimir Karputov
Модератор
180740
Vladimir Karputov  
Реter Konow:


Кстати, а попробуйте создать Проект:


Реter Konow
8667
Реter Konow  
Vladimir Karputov:

Кстати, а попробуйте создать Проект:


Хорошо. Только поясню. Сам код конструктора или движка более 20 000 строк кода. В этой ветке, я хотел научить людей создавать GUI на языке разметки, а не разбираться в кодах самого конструктора. Поэтому, код конструктора я хочу выложить одним файлом, для удобства пользователей.

Vladimir Karputov
Модератор
180740
Vladimir Karputov  
Реter Konow:

Хорошо. Только поясню. Сам код конструктора или движка более 20 000 строк кода. В этой ветке, я хотел научить людей создавать GUI на языке разметки, а не разбираться в кодах самого конструктора. Поэтому, код конструктора я хочу выложить одним файлом, для удобства пользователей.

Неа. Так каждый продавец Маркета начнёт свою ветку вида "Протестируй мой самый лучший советник".

Реter Konow
8667
Реter Konow  
Vladimir Karputov:

Неа. Так каждый продавец Маркета начнёт свою ветку вида "Протестируй мой самый лучший советник".

Ладно. Без разницы. Опубликую как есть.

Igor Makanu
9496
Igor Makanu  
Реter Konow:

P.S. Проект краудсорсовый, а значит мы реализуем его вместе.

а что хоть краудсорс в этом проекте есть или будет?

по моему Вы тестировщиков ищете , а не тех кто объединится и "допилит код" до продакшена (даже если код на бесплатной основе)