Biblioteca gráfica GUI para MetaTrader: guia de instalação e utilização

Biblioteca gráfica GUI para MetaTrader: guia de instalação e utilização

10 novembro 2026, 16:38
Omar Alkassar
0
1

✔️ 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

✔️ Documentação completa, galeria de elementos e ferramenta Imagem para Código5:   https://www.betasoft.dev/gui-graphic-library



Uma tabela de posições, um bilhete de ordem e um gráfico ao vivo.

A GUI Graphic Library oferece aos seus Expert Advisors e indicadores uma interface completa: janelas, abas, menus, tabelas, gráficos, seletores, diálogos e widgets de negociação. Tudo é desenhado em uma única tela, o mesmo código funciona no MetaTrader 4 e no MetaTrader 5, e a API completa possui 15 funções.

Este guia orienta você desde o download até o seu primeiro painel funcional e, em seguida, aborda as tarefas que você realizará com mais frequência. Cada exemplo de código utiliza apenas o arquivo de inclusão público, permitindo que você o copie e cole em seu próprio programa.

Uma pequena parte dos 78 elementos: botões, campos de entrada, controles deslizantes e abas.

1. Antes de começar

  • MetaTrader 4 ou MetaTrader 5 no Windows. As fontes e os ícones seguem a escala de exibição do Windows (100, 125, 150 e 200%).
  • MetaEditor, para compilar as demonstrações e seus próprios programas.
  • Nada a permitir nas opções do terminal: a biblioteca não usa nenhuma DLL, não faz requisições à web e não usa variáveis globais do terminal.
  • As versões MT4 e MT5 são produtos separados. Instale a versão compatível com o seu terminal.

2. Instalação

  1. No terminal, selecione Arquivo e, em seguida, Abrir pasta de dados.
  2. Abra a pasta MQL5 (MetaTrader 5) ou a pasta MQL4 (MetaTrader 4).
  3. Copie cada arquivo para a pasta indicada na tabela acima: Libraries, Include, Experts e Indicators.
  4. Abra cada demonstração no MetaEditor e pressione F7. O resultado deve mostrar 0 erros e 0 avisos.
  5. De volta ao terminal, atualize o Navegador (clique com o botão direito e selecione Atualizar) para que os novos programas apareçam.

As pastas devem ter esta aparência:

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

Não renomeie o arquivo da biblioteca. O arquivo de inclusão o carrega com esse nome.

Verificações após a instalação

Verificar

Onde

O arquivo .ex5 (ou .ex4) está em Bibliotecas.

Pasta de dados

O arquivo .mqh está em Include.

Pasta de dados

A demonstração compilou sem erros.

MetaEditor

A demonstração mostra uma janela no gráfico.

Gráfico

A aba Especialistas não possui linhas "não suportado".

Terminal, Caixa de Ferramentas

O que contém o arquivo GUI_Graphic_Library.mqh?

O arquivo de inclusão é propositalmente pequeno. Acima do bloco de importação, ele declara os enums (tipos de objeto, propriedades, eventos, temas e ícones). O bloco de importação abaixo carrega a biblioteca compilada e lista suas 15 funções. O MetaTrader 5 carrega o arquivo .ex5 e o MetaTrader 4 carrega o arquivo .ex4, escolhido pelo compilador. Você inclui o arquivo, nunca o edita.

 #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

As 15 funções na ordem em que aparecem:

Função

O que faz

Onde você chama isso

Versão da GUI

Retorna a versão da biblioteca em formato de texto.

Em qualquer lugar

Gui_Criar

Inicia a interface gráfica em um gráfico. Passe 0 para o gráfico atual, um nome para o seu programa e um número de subjanela para os indicadores. Retorna verdadeiro se a operação for bem-sucedida.

OnInit

Gui_Destruir

Remove a interface gráfica e tudo o que ela representava.

OnDeinit

Gui_ChartEvent

Envia o evento do gráfico (mouse, teclas, cliques) para a biblioteca.

Evento OnChart

Temporizador Gui

Executa os temporizadores da biblioteca: animações, notificações (toasts), contadores.

Temporizador

Atualização da GUI

Repinta o que mudou. Passar a perna para repintar tudo.

Fim de cada manipulador

Gui_NextEvent

Executa o próximo evento da fila (clique, alteração, resultado de diálogo, solicitação de negociação). Retorna falso quando a fila estiver vazia.

Loop de eventos

Gui_Adicionar

Cria um elemento e retorna seu ID. Você fornece o tipo, o elemento pai, um nome, o texto e as coordenadas x, y, largura e altura.

OnInit

Conjunto de GUI

Altera uma propriedade ou executa uma ação em um elemento. Retorna -1 e registra uma linha se o elemento não suportar essa ação.

Em qualquer lugar

Gui_Get

Lê uma propriedade como texto.

Em qualquer lugar

Gui_GetNum

Lê uma propriedade como um número.

Em qualquer lugar

Gui_SetArray

Envia uma lista de números para um elemento, por exemplo, uma série inteira de um gráfico.

Em qualquer lugar

Gui_AdicionarImagem

Registra uma imagem a partir de uma matriz de pixels ARGB, permitindo que os elementos a exibam. A ferramenta "Imagem para Código" no site cria essa matriz a partir de um PNG.

OnInit

Gui_Find

Encontra o ID de um elemento pelo seu nome.

Em qualquer lugar

Gui_TrazerParaFrente

Move a interface gráfica para cima dos objetos do gráfico que você desenhou posteriormente.

Depois de criar os objetos do gráfico

Essa é toda a interface. Todo o resto neste guia é uma combinação dessas 15 chamadas.

3. Execute a demonstração completa.

  1. Abra um gráfico. Uma janela grande, por exemplo, de 1280 por 720 pixels ou mais, mostra mais informações.
  2. Arraste GUI_Graphic_Library_FullDemo do Navegador para o gráfico.
  3. Utilize as abas de seção na parte superior: Início, Casos de uso, Botões, Entradas, Seletores, Dados, Gráficos, Layout, Feedback, Negociação e Configurações.

A demonstração nunca envia ordens a menos que você defina a entrada InpLiveTrading como verdadeira. Deixe-a desativada em uma conta real. Se você fechar a janela principal, o Expert Advisor será removido automaticamente.

Use GUI_Graphic_Library_ElementTests quando quiser examinar um elemento por vez: clique em um grupo na janela de seleção.

Um painel de controle construído exclusivamente com elementos da biblioteca.

4. Seu primeiro painel

Este é um Expert Advisor completo: uma janela com um campo para tamanho do lote, um botão de Compra e uma barra de status. Ele não realiza negociações; apenas exibe uma mensagem.

 #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();
  }

O padrão nunca muda:

  1. O método OnInit cria a interface gráfica do usuário (GUI) e os elementos.
  2. OnChartEvent e OnTimer enviam eventos para a biblioteca, leem a fila e chamam Gui_Update.
  3. OnDeinit destrói a interface gráfica do usuário (GUI).

5. Como a biblioteca pensa

  • IDs. Gui_Add retorna um ID inteiro. Guarde os IDs que precisar ou encontre um posteriormente pelo nome com Gui_Find("nome"). O ID 0 é a própria GUI: tema, notificações, diálogos, contadores.
  • Elementos pais. Cada elemento é adicionado a um elemento pai, uma janela ou um contêiner. Janelas, menus e etiquetas de preço usam o elemento pai 0. Para uma aba, o elemento pai é o elemento da aba e o ID retornado é a página à qual você adiciona os elementos filhos.
  • Propriedades. Gui_Set(id, propriedade, texto, a, b, c, d) altera uma propriedade ou executa uma ação. O texto é inserido no argumento texto; números, cores e enumerações são inseridos nos argumentos a até d. Gui_Get lê o texto e Gui_GetNum lê os números.
  • Eventos. A biblioteca enfileira as ações do usuário. Leia a fila com Gui_NextEvent.
  • As coordenadas estão em pixels na escala de 100%. A biblioteca as multiplica pela escala de exibição do Windows para você.

Se você passar uma propriedade que um elemento não suporta, nada será quebrado: a chamada retorna -1 e uma linha é escrita no log de especialistas.

6. As tarefas que você realizará com mais frequência

Leia o que o usuário digitou ou selecionou.

 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);

Abas

 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 );

Tabelas

 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 );

Um clique em uma célula de botão envia o evento GUI_EVENT_CELL_BUTTON com a linha em lparam e a coluna em 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 e brindes

 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 e cores

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 );

Lembre-se das janelas e dos 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 utilizam pequenos arquivos de texto. Nenhuma variável global de terminal é usada.

Faça alguma coisa a 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. Um painel de negociação com sua própria função de pedidos

O formulário de ordens, o painel de posições e a calculadora de risco leem a conta e o símbolo, e então fornecem os eventos. Eles nunca enviam ordens. Você decide o que acontece quando o usuário clica em Comprar ou 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();
  }

Faça o teste primeiro em uma conta demo. Antes de enviar ordens reais, verifique também o tamanho do lote em relação aos valores mínimo, máximo e incremento definidos para o símbolo, e a distância do stop em relação ao nível de stop da corretora.

As posições funcionam da mesma maneira: adicione GUI_OBJ_POSITIONS e, em seguida, reaja a GUI_EVENT_POSITION (lparam é o parâmetro, dparam é 1 para Fechar e 2 para Modificar).

8. Utilizando-o em um indicador

Um indicador pode desenhar a GUI em sua própria subjanela. Passe o número dessa janela para 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 desenhar no gráfico de preços a partir de um indicador, use a subjanela 0. As duas demonstrações de indicadores são exemplos completos. Existe uma interface gráfica para cada programa e gráfico, portanto, dê a cada programa seu próprio nome de interface gráfica.

9. MetaTrader 4 e MetaTrader 5

Tópico

MetaTrader 4

MetaTrader 5

Arquivo da biblioteca

.ex4

.ex5

Menu de contexto

Pressione e segure o botão esquerdo ou Ctrl + clique.

Clique com o botão direito do mouse

roda do mouse

Não foi enviado pelo terminal. Use as barras de rolagem.

Funciona

Profundidade do mercado

Adicione os níveis você mesmo

Lê o livro do mercado

Calendário econômico

Adicione as linhas você mesmo

Carrega do terminal

Digitando

Mapa de legendas dos EUA integrado

Qualquer layout de teclado funciona

10. Se algo não funcionar

Problema

O que fazer

Nada aparece no gráfico.

Verifique se Gui_Create retornou verdadeiro e leia as últimas linhas da guia Especialistas.

O compilador não consegue abrir o arquivo GUI_Graphic_Library.mqh.

O arquivo de inclusão não está na pasta Include da mesma pasta de dados que o seu programa.

O programa não consegue carregar a biblioteca em tempo de execução.

O arquivo .ex5 ou .ex4 está faltando nas Bibliotecas, ou seu nome foi alterado.

Um valor alterado no código não é exibido.

Chame Gui_Update() no final do seu manipulador.

A aba Especialistas indica que uma propriedade não é suportada.

Essa propriedade não existe para esse elemento. Consulte a referência da API.

Dois programas disputam a mesma parada.

Atribua um nome diferente a cada um deles em Gui_Create.

As linhas do gráfico cobrem a interface gráfica do usuário.

Chame Gui_BringToFront() depois de criar os objetos do gráfico.

O texto é muito pequeno ou muito grande.

Defina Gui_Set(0,GUI_PROP_SCALE,"",1.5), ou reinicie o terminal após alterar a escala do Windows.

Você quer ver o que a biblioteca está fazendo.

Ative Gui_Set(0,GUI_PROP_DEBUG,"",true) para a sobreposição de depuração.

11. Dicas

  • Chame Gui_Update() ao final de cada manipulador. Isso redesenha apenas o que foi alterado.
  • Páginas com abas ocultas e janelas recolhidas não causam repintura, portanto, atualizá-las por meio de um temporizador é uma solução barata.
  • Use GUI_PROP_MAX_FPS para limitar a taxa de quadros se você executar muitos gráficos.
  • Use GUI_PROP_CLEAR_EVENTS no final de OnInit para descartar os eventos enfileirados durante a construção do painel.
  • Utilize a ferramenta "Imagem para Código" no site para converter um logotipo ou ícone PNG em uma matriz para Gui_AddImage.
  • Os novos valores de enumeração são adicionados apenas no final, portanto, os programas compilados com um arquivo de inclusão mais antigo continuam funcionando após uma atualização. Substitua o arquivo da biblioteca e o arquivo de inclusão simultaneamente.

12. Para onde ir a seguir

Sua opinião é bem-vinda. Para perguntas ou sugestões de melhoria, escreva nos comentários do produto ou envie-me uma mensagem em MQL5.com.




Arquivos anexados: