Biblioteca gráfica GUI para MetaTrader: guía de instalación y uso

Biblioteca gráfica GUI para MetaTrader: guía de instalación y uso

10 noviembre 2026, 16:36
Omar Alkassar
0
4

✔️ Biblioteca gráfica GUI MT4©:   https://www.mql5.com/en/market/product/206760

✔️ Biblioteca gráfica GUI MT5©:   https://www.mql5.com/en/market/product/206761

✔️ Documentación completa, galería de elementos y herramienta de conversión de imagen a código5:   https://www.betasoft.dev/gui-graphic-library



Una tabla de posiciones, un ticket de pedido y un gráfico en tiempo real.

La biblioteca gráfica GUI proporciona a sus asesores expertos e indicadores una interfaz completa: ventanas, pestañas, menús, tablas, gráficos, selectores, diálogos y widgets de trading. Todo se dibuja en un mismo lienzo, el mismo código funciona en MetaTrader 4 y MetaTrader 5, y la API completa consta de 15 funciones.

Esta guía te acompaña desde la descarga hasta tu primer panel de control, y luego a las tareas que realizarás con mayor frecuencia. Cada ejemplo de código utiliza únicamente el archivo de inclusión público, por lo que puedes copiarlo y pegarlo en tu propio programa.

Una pequeña parte de los 78 elementos: botones, campos de entrada, controles deslizantes y pestañas.

1. Antes de empezar

  • MetaTrader 4 o MetaTrader 5 en Windows. Las fuentes y los iconos siguen la escala de visualización de Windows (100, 125, 150 y 200 por ciento).
  • MetaEditor, para compilar las demostraciones y tus propios programas.
  • No hay nada que permitir en las opciones del terminal: la biblioteca no utiliza ninguna DLL, no realiza solicitudes web y no utiliza variables globales del terminal.
  • Las versiones MT4 y MT5 son productos independientes. Instale la que corresponda a su terminal.

2. Instalación

  1. En la terminal, seleccione Archivo y luego Abrir carpeta de datos.
  2. Abra la carpeta MQL5 (MetaTrader 5) o la carpeta MQL4 (MetaTrader 4).
  3. Copie cada archivo en la carpeta que se muestra en la tabla anterior: Bibliotecas, Incluir, Expertos e Indicadores.
  4. Abra cada demo en MetaEditor y pulse F7. El resultado debería mostrar 0 errores y 0 advertencias.
  5. De vuelta en la terminal, actualiza el Navegador (clic derecho, Actualizar) para que aparezcan los nuevos programas.

Las carpetas deberían verse así:

MQL5/

  Include/GUI_Graphic_Library.mqh

  Libraries/GUI_Graphic_Library.ex5

  Experts/GUI_Graphic_Library_FullDemo.mq5

          GUI_Graphic_Library_ElementTests.mq5

  Indicators/GUI_Graphic_Library_IndicatorWindow.mq5

             GUI_Graphic_Library_IndicatorChart.mq5

MQL4/   the same files with .mq4 and .ex4

No cambie el nombre del archivo de la biblioteca. El archivo de inclusión lo carga con ese nombre.

Comprobaciones después de la instalación

Controlar

Dónde

El archivo .ex5 (o .ex4) se encuentra en Bibliotecas.

Carpeta de datos

El archivo .mqh se encuentra en Include

Carpeta de datos

La demo se compila sin errores.

MetaEditor

La demostración muestra una ventana en el gráfico.

Cuadro

La pestaña Expertos no tiene líneas "no compatibles".

Terminal, Caja de herramientas

¿Qué contiene GUI_Graphic_Library.mqh?

El archivo de inclusión es pequeño a propósito. Encima del bloque de importación, declara las enumeraciones (tipos de objeto, propiedades, eventos, temas e iconos). El bloque de importación inferior carga la biblioteca compilada y enumera sus 15 funciones. MetaTrader 5 carga el archivo .ex5 y MetaTrader 4 carga el archivo .ex4, elegido por el compilador. Solo tienes que incluir el archivo y no editarlo.

 #ifdef __MQL5__
#import "\\Market\\GUI_Graphic_Library.ex5"
#else
#import "\\Market\\GUI_Graphic_Library.ex4"
#endif
   string Gui_Version();
   bool    Gui_Create( const long chart= 0 , const string name= "GUI_Graphic_Library" , const int subwin= 0 );
   void    Gui_Destroy();
   void    Gui_ChartEvent( const int id, const long lparam, const double dparam, const string sparam);
   void    Gui_Timer();
   void    Gui_Update( const bool force= false );
   bool    Gui_NextEvent(ENUM_GUI_EVENT &event, int &sender, long &lparam, double &dparam, string &sparam);
   int     Gui_Add( const ENUM_GUI_OBJECT type, const int parent, const string name, const string text, const int x, const int y, const int w, const int h);
   int     Gui_Set( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE , const double c= EMPTY_VALUE , const double d= EMPTY_VALUE );
   string Gui_Get( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE );
   double Gui_GetNum( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE );
   int     Gui_SetArray( const int id, const ENUM_GUI_PROP prop, const double &values[], const double a= EMPTY_VALUE );
   int     Gui_AddImage( const string name, const uint &argb[], const int w, const int h);
   int     Gui_Find( const string name);
   void    Gui_BringToFront();
#import

Las 15 funciones en el orden en que aparecen:

Función

Lo que hace

¿Dónde lo llamas?

Versión de la interfaz gráfica

Devuelve la versión de la biblioteca como texto.

En cualquier lugar

Gui_Create

Inicia la interfaz gráfica de usuario en un gráfico. Pase 0 para el gráfico actual, un nombre para su programa y un número de subventana para los indicadores. Devuelve verdadero si se ejecuta correctamente.

En el inicio

Gui_Destroy

Elimina la interfaz gráfica de usuario y todo lo que dibujaba.

OnDeinit

Evento de gráfico de la interfaz gráfica

Proporciona a la biblioteca el evento del gráfico (ratón, teclas, clics).

Evento OnChart

Temporizador de interfaz gráfica

Ejecuta los temporizadores de la biblioteca: animaciones, mensajes emergentes y contadores.

En temporizador

Actualización de la interfaz gráfica de usuario

Repinta lo que ha cambiado. Pasa "verdadero" para repintar todo.

Fin de cada controlador

Gui_NextEvent

Toma el siguiente evento de la cola (clic, cambio, resultado de diálogo, solicitud de intercambio). Devuelve falso cuando la cola está vacía.

Bucle de eventos

Agregar a la interfaz gráfica

Crea un elemento y devuelve su ID. Debes especificar el tipo, el elemento padre, un nombre, el texto y las coordenadas x, y, ancho y alto.

En el inicio

Conjunto de interfaz gráfica

Modifica una propiedad o ejecuta una acción en un elemento. Devuelve -1 y registra una línea si el elemento no lo admite.

En cualquier lugar

Gui_Get

Lee una propiedad como texto.

En cualquier lugar

Gui_GetNum

Lee una propiedad como un número.

En cualquier lugar

Gui_SetArray

Envía una lista de números a un elemento, por ejemplo, una serie completa de gráficos.

En cualquier lugar

Gui_AddImage

Registra una imagen a partir de una matriz de píxeles ARGB, para que los elementos puedan mostrarla. La herramienta Imagen a Código del sitio web crea esta matriz a partir de un archivo PNG.

En el inicio

Gui_Find

Busca un elemento por su nombre.

En cualquier lugar

Gui_BringToFront

Mueve la interfaz gráfica de usuario por encima de los objetos del gráfico que dibujaste después.

Después de crear objetos de gráfico

Esa es toda la interfaz. Todo lo demás en esta guía es una combinación de estas 15 llamadas.

3. Ejecuta la demostración completa.

  1. Abra un gráfico. Una ventana grande, por ejemplo de 1280 por 720 píxeles o más, muestra la mayor cantidad de información.
  2. Arrastre GUI_Graphic_Library_FullDemo desde el Navegador al gráfico.
  3. Utilice las pestañas de sección en la parte superior: Inicio, Casos de uso, Botones, Entradas, Selectores, Datos, Gráficos, Diseño, Comentarios, Operaciones y Configuración.

La cuenta demo nunca envía órdenes a menos que configure la opción InpLiveTrading como verdadera. En una cuenta real, déjela desactivada. Si cierra la ventana principal, el Asesor Experto se eliminará automáticamente.

Utilice GUI_Graphic_Library_ElementTests cuando desee examinar un elemento a la vez: haga clic en un grupo en su ventana de selección.

Un panel de control construido únicamente con elementos de la biblioteca.

4. Tu primer panel

Se trata de un Asesor Experto completo: una ventana con un cuadro para introducir el tamaño del lote, un botón de compra y una línea de estado. No realiza operaciones; simplemente muestra un mensaje.

 #include <GUI_Graphic_Library.mqh>
int wMain, spLots, btnBuy, lblInfo;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (!Gui_Create( 0 , "MyPanel" ))
       return INIT_FAILED ;       // 0 = this chart
   Gui_Set( 0 , GUI_PROP_THEME, "" , GUI_THEME_DARK);
   wMain = Gui_Add(GUI_OBJ_WINDOW, 0 , "wMain" , "My panel" , 20 , 40 , 300 , 170 );
   Gui_Set(wMain, GUI_PROP_THEME_BUTTON, "" , true );       // sun / moon button
   Gui_Set(wMain, GUI_PROP_MAIN_WINDOW, "" , true );         // close asks to remove the program
   spLots = Gui_Add(GUI_OBJ_SPIN, wMain, "spLots" , "" , 10 , 10 , 280 , 30 );
   Gui_Set(spLots, GUI_PROP_RANGE, "" , 0.01 , 50 , 0.01 , 2 ); // min, max, step, digits
   Gui_Set(spLots, GUI_PROP_VALUE, "" , 0.10 );
   Gui_Set(spLots, GUI_PROP_SUFFIX, "lots" );
   btnBuy = Gui_Add(GUI_OBJ_BUTTON, wMain, "btnBuy" , "BUY" , 10 , 50 , 280 , 40 );
   Gui_Set(btnBuy, GUI_PROP_STYLE, "" , GUI_BUTTON_SUCCESS);
   Gui_Set(btnBuy, GUI_PROP_ICON, "" , GUI_ICON_ARROW_UP);
   lblInfo = Gui_Add(GUI_OBJ_LABEL, wMain, "lblInfo" , "Ready" , 10 , 100 , 280 , 20 );
   Gui_Set(lblInfo, GUI_PROP_DIM, "" , true );
   Gui_Set( 0 , GUI_PROP_REDRAW);
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ProcessEvents()
  {
   ENUM_GUI_EVENT ev;
   int sender;
   long l;
   double d;
   string s;
   while (Gui_NextEvent(ev, sender, l, d, s))
       if (ev == GUI_EVENT_CLICK && sender == btnBuy)
        {
         double lots = Gui_GetNum(spLots, GUI_PROP_VALUE);
         Gui_Set(lblInfo, GUI_PROP_TEXT, "Buy " + DoubleToString (lots, 2 ) + " lots" );
         Gui_Set( 0 , GUI_PROP_TOAST, "Buy|" + DoubleToString (lots, 2 ) + " lots" , GUI_NOTICE_SUCCESS, 3000 );
        }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int r)
  {
   Gui_Destroy();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   Gui_Timer();
   ProcessEvents();
   Gui_Update();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long &l, const double &d, const string &s)
  {
   Gui_ChartEvent(id, l, d, s);
   ProcessEvents();
   Gui_Update();
  }

El patrón nunca cambia:

  1. OnInit crea la interfaz gráfica de usuario y los elementos.
  2. OnChartEvent y OnTimer envían eventos a la biblioteca, leen la cola y llaman a Gui_Update.
  3. OnDeinit destruye la interfaz gráfica de usuario.

5. Cómo piensa la biblioteca

  • Ids. Gui_Add devuelve un ID entero. Guarda los IDs que necesites o busca uno más tarde por nombre con Gui_Find("nombre"). El ID 0 es la interfaz gráfica de usuario (GUI): tema, notificaciones, diálogos, contadores.
  • Elementos principales. Cada elemento se agrega a un elemento principal, ya sea una ventana o un contenedor. Las ventanas, los menús y las etiquetas de precio utilizan el elemento principal 0. Para una pestaña, el elemento principal es el elemento de pestañas y el ID devuelto es la página a la que se agregan los elementos secundarios.
  • Propiedades. Gui_Set(id, propiedad, texto, a, b, c, d) modifica una propiedad o ejecuta una acción. El texto se introduce en el argumento texto; los números, colores y enumeraciones se introducen en los argumentos a a d. Gui_Get lee texto y Gui_GetNum lee números.
  • Eventos. La biblioteca pone en cola las acciones del usuario. Lea la cola con Gui_NextEvent.
  • Las coordenadas están en píxeles a una escala del 100 %. La biblioteca las multiplica automáticamente por la escala de visualización de Windows.

Si se pasa una propiedad que un elemento no admite, no ocurre nada: la llamada devuelve -1 y se escribe una línea en el registro de Expertos.

6. Las tareas que realizará con mayor frecuencia

Lee lo que el usuario escribió o eligió.

 string name=Gui_Get(edName,GUI_PROP_TEXT);
double lots=Gui_GetNum(spLots,GUI_PROP_VALUE);
int     tab =( int )Gui_GetNum(tabs,GUI_PROP_SELECTED);

Cortina a la italiana

 int t=Gui_Add(GUI_OBJ_TABS,win, "tabs" , "" , 10 , 10 , 600 , 300 );
int pOrders =Gui_Add(GUI_OBJ_TAB,t, "" , "Orders" , 0 , 0 , 0 , 0 );     // returns the page
int pHistory=Gui_Add(GUI_OBJ_TAB,t, "" , "History" , 0 , 0 , 0 , 0 );
Gui_Add(GUI_OBJ_BUTTON,pOrders, "b1" , "Close all" , 10 , 10 , 120 , 30 );

Tablas

 int tb=Gui_Add(GUI_OBJ_TABLE,page, "tbl" , "" , 10 , 10 , 600 , 300 );
Gui_Set(tb,GUI_PROP_ADD_COLUMN, "Symbol" , 120 ,GUI_ALIGN_LEFT);
Gui_Set(tb,GUI_PROP_ADD_COLUMN, "Strength" , 130 ,GUI_ALIGN_LEFT,GUI_COL_PROGRESS);
Gui_Set(tb,GUI_PROP_ADD_BUTTON_COLUMN, "Action" , 100 ,GUI_BUTTON_PRIMARY);
Gui_Set(tb,GUI_PROP_ADD_ROW, "EURUSD|64|Trade" );
Gui_Set(tb,GUI_PROP_SORT, "" , 0 , true );

Al hacer clic en una celda de botón, se envía GUI_EVENT_CELL_BUTTON con la fila en lparam y la columna en dparam.

Gráficos

 int ch=Gui_Add(GUI_OBJ_LINECHART,page, "chart" , "Price" , 10 , 10 , 500 , 260 );
int ln=Gui_Set(ch,GUI_PROP_ADD_SERIES, "Close" , clrDodgerBlue );     // returns the series index
double closes[]; CopyClose ( _Symbol , PERIOD_H1 , 0 , 100 ,closes);
Gui_SetArray(ch,GUI_PROP_SERIES,closes,ln);                       // a whole series at once

int cd=Gui_Add(GUI_OBJ_CANDLECHART,page, "cd" , _Symbol , 10 , 280 , 500 , 260 );
Gui_Set(cd,GUI_PROP_LOAD_BARS, _Symbol , 80 );
Gui_Set(cd,GUI_PROP_ADD_MA, "" , 20 , clrDodgerBlue );
Gui_Set(cd,GUI_PROP_ADD_BANDS, "" , 20 , 2.0 );

Diálogos y mensajes emergentes

 enum { CMD_CLOSE_ALL= 500 };
Gui_Set( 0 ,GUI_PROP_CONFIRM, "Close all|Close every position?|Close|Cancel" ,CMD_CLOSE_ALL);
// later, in the event loop:
if (ev==GUI_EVENT_DIALOG && Gui_GetNum(sender,GUI_PROP_CMD)==CMD_CLOSE_ALL && l== 0 )
   CloseAll();                       // l = button index, -1 = cancelled

Gui_Set( 0 ,GUI_PROP_TOAST, "Order|Filled" ,GUI_NOTICE_SUCCESS, 3000 );

Temas y colores

Gui_Set( 0 ,GUI_PROP_THEME, "" ,GUI_THEME_MIDNIGHT);   // DARK, LIGHT, MIDNIGHT, HIGHCONTRAST, SOFT
Gui_Set( 0 ,GUI_PROP_ACCENT, "" , clrOrange );
Gui_Set( 0 ,GUI_PROP_RADIUS, "" , 10 );

Recuerde ventanas y valores

Gui_Set( 0 ,GUI_PROP_AUTO_LAYOUT, "" , true );   // load now, save when the GUI is destroyed
Gui_Set( 0 ,GUI_PROP_LOAD_VALUES);             // in OnInit
Gui_Set( 0 ,GUI_PROP_SAVE_VALUES);             // in OnDeinit

Ambos utilizan archivos de texto pequeños. No se utilizan variables globales de terminal.

Haz algo cada segundo

Gui_Set( 0 ,GUI_PROP_COUNTER, "refresh" , 1000 , true );   // name, ms, repeat
// in OnTimer:
if (Gui_GetNum( 0 ,GUI_PROP_COUNTER_DONE, "refresh" )!= 0 ) RefreshNumbers();

7. Un panel de negociación con su propia función de órdenes.

El ticket de órdenes, el panel de posiciones y la calculadora de riesgos leen la cuenta y el símbolo, y luego generan eventos. Nunca envían órdenes. Usted decide qué sucede cuando el usuario hace clic en Comprar o Vender.

 #include <GUI_Graphic_Library.mqh>
#ifdef __MQL5__
#include <Trade\Trade.mqh>
CTrade g_trade;
#endif
input bool InpLiveTrading = false ;   // send real orders
int g_ticket = 0 ;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (!Gui_Create( 0 , "GUI_TradePanel" ))
       return INIT_FAILED ;
   int w = Gui_Add(GUI_OBJ_WINDOW, 0 , "w" , "Trade" , 20 , 40 , 360 , 260 );
   Gui_Set(w, GUI_PROP_MAIN_WINDOW, "" , true );
   g_ticket = Gui_Add(GUI_OBJ_ORDERTICKET, w, "ticket" , _Symbol , 10 , 10 , 340 , 212 );
   Gui_Set(g_ticket, GUI_PROP_LOTS, "" , 0.10 );
   Gui_Set(g_ticket, GUI_PROP_STOP_POINTS, "" , 300 );
   Gui_Set(g_ticket, GUI_PROP_TP_POINTS, "" , 600 );
   Gui_Set(g_ticket, GUI_PROP_SHOW_LINES, "" , true );   // SL and TP lines on the chart
   Gui_Set( 0 , GUI_PROP_CLEAR_EVENTS);
   return INIT_SUCCEEDED ;
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MyTrade( const bool buy, const double lots, const double sl, const double tp)
  {
   if (!InpLiveTrading)
     {
       Print ( "Trading is off. Would " , buy ? "buy " : "sell " , lots, " lots" );
       return ;
     }
#ifdef __MQL5__
   if (buy)
      g_trade.Buy(lots, _Symbol , 0.0 , sl, tp);
   else
      g_trade.Sell(lots, _Symbol , 0.0 , sl, tp);
#else
   if (buy)
       OrderSend ( _Symbol , OP_BUY, lots, Ask, 3 , sl, tp, "GUI" , 0 , 0 , clrGreen );
   else
       OrderSend ( _Symbol , OP_SELL, lots, Bid, 3 , sl, tp, "GUI" , 0 , 0 , clrRed );
#endif
   }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ProcessEvents()
  {
   ENUM_GUI_EVENT ev;
   int sender;
   long l;
   double d;
   string s;
   while (Gui_NextEvent(ev, sender, l, d, s))
       if (ev == GUI_EVENT_TRADE)           // l: 0 buy, 1 sell   d: lots   s: "sl|tp" prices
        {
         string p[];
         StringSplit (s, '|' , p);
         double sl = ( ArraySize (p) > 0 ) ? StringToDouble (p[ 0 ]) : 0.0 ;
         double tp = ( ArraySize (p) > 1 ) ? StringToDouble (p[ 1 ]) : 0.0 ;
         MyTrade(l == 0 , d, sl, tp);
        }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int r)
  {
   Gui_Destroy();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   Gui_Timer();
   ProcessEvents();
   Gui_Update();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long &l, const double &d, const string &s)
  {
   Gui_ChartEvent(id, l, d, s);
   ProcessEvents();
   Gui_Update();
  }

Pruébalo primero en una cuenta demo. Antes de enviar órdenes reales, verifica también el tamaño del lote con respecto al mínimo, máximo y paso del símbolo, y la distancia del stop con respecto al nivel de stop del bróker.

Las posiciones funcionan de la misma manera: agregue GUI_OBJ_POSITIONS y luego reaccione a GUI_EVENT_POSITION (lparam es el ticket, dparam es 1 para Cerrar y 2 para Modificar).

8. Usarlo en un indicador

Un indicador puede dibujar la interfaz gráfica de usuario en su propia subventana. Pase el número de esa ventana a Gui_Create:

 #property indicator_separate_window
int OnInit ()
  {
   int sub= ChartWindowFind ();
   Gui_Create( 0 , "GUI_MyIndicator" ,sub);
   // add windows and controls as usual
   return INIT_SUCCEEDED ;
  }

Para dibujar en el gráfico de precios desde un indicador, utilice la subventana 0. Las dos demostraciones de indicadores son ejemplos completos. Hay una interfaz gráfica de usuario (GUI) por programa y gráfico, así que asigne a cada programa su propio nombre de GUI.

9. MetaTrader 4 y MetaTrader 5

Tema

MetaTrader 4

MetaTrader 5

Archivo de biblioteca

.ex4

.ex5

Menú contextual

Mantén pulsado el botón izquierdo o pulsa Ctrl + clic.

clic derecho

rueda del ratón

No se envía desde la terminal. Utilice las barras de desplazamiento.

Obras

Profundidad del mercado

Añade tú mismo los niveles

Lee el libro del mercado

Calendario económico

Añade las filas tú mismo

Cargas desde la terminal

Mecanografía

Mapa de claves de EE. UU. integrado

Cualquier distribución de teclado funciona

10. Si algo no funciona

Problema

¿Qué hacer?

No aparece nada en el gráfico.

Comprueba que Gui_Create haya devuelto true y lee las últimas líneas de la pestaña Expertos.

El compilador no puede abrir GUI_Graphic_Library.mqh

El archivo de inclusión no se encuentra en la carpeta Include de la misma carpeta de datos que su programa.

El programa no puede cargar la biblioteca en tiempo de ejecución.

El archivo .ex5 o .ex4 no se encuentra en la carpeta Bibliotecas, o bien se le ha cambiado el nombre.

Un valor cambiado en el código no se muestra

Llama a Gui_Update() al final de tu controlador.

La pestaña Expertos indica que una propiedad no es compatible.

Esa propiedad no existe para ese elemento. Consulta la documentación de la API.

Dos programas compiten en un mismo gráfico.

En Gui_Create, asigna un nombre a cada uno.

Las líneas del gráfico cubren la interfaz gráfica de usuario.

Llama a Gui_BringToFront() después de crear los objetos del gráfico.

El texto es demasiado pequeño o demasiado grande.

Establezca Gui_Set(0,GUI_PROP_SCALE,"",1.5), o reinicie la terminal después de cambiar la escala de Windows.

Quieres ver qué está haciendo la biblioteca.

Active Gui_Set(0,GUI_PROP_DEBUG,"",true) para la superposición de depuración.

11. Consejos

  • Llama a Gui_Update() al final de cada controlador. Solo repinta lo que ha cambiado.
  • Las pestañas ocultas y las ventanas colapsadas no provocan ningún cambio de color, por lo que actualizarlas mediante un temporizador resulta económico.
  • Utilice GUI_PROP_MAX_FPS para limitar la velocidad de fotogramas si ejecuta muchos gráficos.
  • Utilice GUI_PROP_CLEAR_EVENTS al final de OnInit para descartar los eventos que se pusieron en cola mientras construía el panel.
  • Utilice la herramienta "Imagen a código" del sitio web para convertir un logotipo o icono PNG en una matriz para la función Gui_AddImage.
  • Los nuevos valores de enumeración solo se agregan al final, por lo que los programas creados con un archivo de inclusión antiguo seguirán funcionando después de una actualización. Reemplace el archivo de la biblioteca y el archivo de inclusión simultáneamente.

12. ¿Adónde ir después?

Tu opinión es bienvenida. Si tienes preguntas o ideas para mejorar, escribe en los comentarios del producto o envíame un mensaje a través de MQL5.com.




Archivos adjuntos: