Interfaz gráfica de usuario de origen colectivo. Prueba beta abierta.

 

Ofrezco a la comunidad un constructor de GUI para programas MQLde uso gratuito.

  • El GUI builder es un archivo cerrado .ex5, para centralizar su desarrollo y evitar confusiones en la distribución de versiones.
  • El motor de la GUI se adjunta mediante un archivo abierto .mqh, ¡pero! -No recomiendo cambiar el código por tu cuenta, sin consultarme, ya que puede dar lugar a errores y pérdida de funcionalidad.
  • Por favor, infórmeme sobre los errores y defectos.

Le agradeceré su participación constructiva.

P.D. El proyecto es crowdsourced, lo que significa que lo pondremos en práctica juntos.

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

CONSTRUCCIÓN:

  • KIB.ex5 - Constructor de GUI.
  • Archivo GUI_DRIVE.mqh - Motor GUI en la aplicación de usuario. Está conectado por el archivo.
  • Indicador KIB-source.mqh - marcando el transmisor de código de los archivos del proyecto del usuario al constructor.

INSTRUCCIONES PARA LA INSTALACIÓN:

Paso 1 - Desembalaje:

  • Coloque el asesor KIB.ex5 en la carpeta Expert. (No colocar en subcarpetas).
  • Coloque el archivo GUI_DRIVE.mqh en la carpeta de inclusión. (No colocar en subcarpetas).
  • Coloque el indicador KIB-source.mqh en la carpeta Indicadores. (No colocar en subcarpetas).

Paso 2 - Instalar los archivos:

  • Instale el Asesor Experto KIB.ex5 en un gráfico libre.
  • Abra el indicador KIB-source.mqh en el MetaEditor y compílelo para obtener el archivo .ex5.
  • Instale el archivo resultante KIB-source.ex5 en el mismo gráfico con el Asesor Experto KIB.ex5.

Paso 3: preparación para el trabajo:

  • Cree una carpeta "MyProjects" para su nuevo proyecto GUI dentro de la carpeta include.
  • Cree el archivo Window_1.mqh para escribir la marca. Abre el archivo.
  • Prescriba la conexión de este archivo en la parte inferior de KIB-source.mqh dentro de la inicialización de la matriz "source" (#include <MisProyectos\Window_1.mqh>).

Paso 4: empezar:

  • Escribe el código más sencillo:

//----------------------------------------------------------------------------------
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,

  • Compilar el archivo KIB-source.mqh. Debería aparecer una ventana con un botón en el gráfico.

Paso 5 - Diseñar la interfaz gráfica de usuario:

  • En la rama adicional, se proporcionarán tutoriales y ejemplos de código para ayudar a crear la interfaz gráfica de usuario deseada.

Paso 6 - Guarde la interfaz gráfica de usuario personalizada:

  • Llame al menú contextual del constructor haciendo doble clic en el gráfico.
  • Seleccione la última opción "Guardar el proyecto e imprimir el archivo API".
  • La carpeta Files contiene dos archivos: "CORES.mqh" y "Internal_API.mqh".
  • Mueva manualmente estos archivos a la carpeta MyProjects desde la carpeta "Files".
  • El proyecto se guarda.

Paso 7 - Conecte la GUI del usuario al Asesor Experto:

//+------------------------------------------------------------------+
//|                                                   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);
   //----------------------------------------------------------------
  }
//+------------------------------------------------------------------+


Paso 8 - recibir eventos de los controles:

  • Los eventos llegan a una función dentro del archivo "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;
  
...

  • Prescribir en sus casos las reacciones requeridas de la funcionalidad del usuario.


HH. Hay una versión compilada del constructor con recursos integrados en el blog :https://www.mql5.com/ru/blogs/post/733356

Esta versión sólo tiene el código abierto, porque los recursos se encuentran en diferentes carpetas (sonidos y subcarpetas con imágenes) y no tiene sentido transferir todo aquí con una gran cantidad de explicaciones.

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

Código cerrado -> Mercado.

Abrir código -> Foro.

 
Vladimir Karputov:

Código cerrado -> Mercado.

Abrir código -> Foro.

De acuerdo. Voy a publicar el código abierto del constructor. Pero, necesito un par de días para repasarlo. ¿Aceptas esperar?

 
Реter Konow:

Bien. Publicaré el código abierto del constructor. Pero, necesitaré un par de días para peinarla. ¿Aceptas esperar?

Tu tema no va a ninguna parte.

 
"¿Shaw? ¿Otra vez?")
 
Dmitriy Skub:
"¿Qué? ¿Otra vez?")
Todavía no lo he peinado, espera.
 
Реter Konow:


Por cierto, intenta crear un proyecto:


 
Vladimir Karputov:

Por cierto, intenta crear un proyecto:


De acuerdo. Sólo para aclarar. El código del constructor o motor propiamente dicho tiene más de 20.000 líneas de código. En este hilo, quería enseñar a la gente cómo crear una GUI en un lenguaje de marcas, no cómo entender el código del constructor en sí. Por lo tanto, quiero poner el código del constructor en un solo archivo, para la comodidad del usuario.

 
Реter Konow:

Muy bien. Sólo para aclarar. El código del constructor o motor propiamente dicho tiene más de 20.000 líneas de código. En este hilo, quería enseñar a la gente cómo crear una GUI en un lenguaje de marcas, no cómo entender el código del constructor en sí. Por eso quiero publicar el código del constructor en un solo archivo, para comodidad de los usuarios.

No. Así, cada vendedor de mercado iniciará su propia rama como "Probar mi mejor EA".

 
Vladimir Karputov:

No. Así es como cada vendedor del Mercado iniciará su propio hilo "Prueba mi mejor EA".

(De acuerdo. Lo que sea. Lo publicaré tal cual.

 
Реter Konow:

P.D. El proyecto es crowdsourced, lo que significa que lo implementamos juntos.

¿hay o habrá crowdsourcing en el proyecto?

Creo que se buscan probadores, no aquellos que se unan y "terminen el código" a producción (aunque el código sea libre)

Razón de la queja: