Libreria grafica GUI per MetaTrader: guida all’installazione e all’utilizzo

Libreria grafica GUI per MetaTrader: guida all’installazione e all’utilizzo

10 novembre 2026, 16:45
Omar Alkassar
0
3

✔️ Libreria grafica GUI MT4©:   https://www.mql5.com/en/market/product/206760

✔️ Libreria grafica GUI MT5©:   https://www.mql5.com/en/market/product/206761

✔️ Documentazione completa, galleria degli elementi e strumento Image to Code5:   https://www.betasoft.dev/gui-graphic-library



Una tabella delle posizioni, una scheda degli ordini e un grafico in tempo reale.

La libreria grafica GUI offre ai tuoi Expert Advisor e indicatori un'interfaccia completa: finestre, schede, menu, tabelle, grafici, selettori, finestre di dialogo e widget di trading. Tutto è disegnato su un'unica tela, lo stesso codice funziona in MetaTrader 4 e MetaTrader 5 e l'intera API è composta da 15 funzioni.

Questa guida ti accompagnerà dal download al tuo primo pannello di controllo funzionante, e poi alle attività che svolgerai più frequentemente. Ogni esempio di codice utilizza solo il file di inclusione pubblico, quindi puoi incollarlo nel tuo programma.

Una piccola parte dei 78 elementi: pulsanti, campi di input, cursori e schede.

1. Prima di iniziare

  • MetaTrader 4 o MetaTrader 5 su Windows. I caratteri e le icone seguono la scala di visualizzazione di Windows (100, 125, 150 e 200 percento).
  • MetaEditor, per compilare le demo e i tuoi programmi.
  • Non c'è nulla da consentire nelle opzioni del terminale: la libreria non utilizza DLL, non effettua richieste web e non utilizza variabili globali del terminale.
  • Le versioni MT4 e MT5 sono prodotti separati. Installa quella compatibile con il tuo terminale.

2. Installazione

  1. Nel terminale, seleziona File, quindi Apri cartella dati.
  2. Apri la cartella MQL5 (MetaTrader 5) o la cartella MQL4 (MetaTrader 4).
  3. Copia ciascun file nella cartella indicata nella tabella sopra: Librerie, Includi, Esperti e Indicatori.
  4. Apri ciascuna demo in MetaEditor e premi F7. Il risultato dovrebbe essere 0 errori, 0 avvisi.
  5. Tornati al terminale, aggiornate il Navigatore (clic destro, Aggiorna) in modo che vengano visualizzati i nuovi programmi.

Le cartelle dovrebbero apparire così:

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

Non rinominare il file della libreria. Il file di inclusione lo carica con quel nome.

Controlli dopo l'installazione

Controllo

Dove

Il file .ex5 (o .ex4) si trova nelle Librerie

Cartella dati

Il file .mqh si trova in Include

Cartella dati

La demo viene compilata senza errori.

MetaEditor

La demo mostra una finestra sul grafico

Grafico

La scheda Esperti non contiene righe "non supportato".

Terminale, cassetta degli attrezzi

Cosa contiene GUI_Graphic_Library.mqh?

Il file di inclusione è volutamente piccolo. Sopra il blocco di importazione dichiara gli enum (tipi di oggetto, proprietà, eventi, temi e icone). Il blocco di importazione sottostante carica la libreria compilata ed elenca le sue 15 funzioni. MetaTrader 5 carica il file .ex5 e MetaTrader 4 carica il file .ex4, scelto dal compilatore. Il file va incluso, non modificato.

 #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

Le 15 funzioni nell'ordine in cui appaiono:

Funzione

Cosa fa

Dove lo chiami

Versione GUI

Restituisce la versione della libreria in formato testo.

Ovunque

Gui_Create

Avvia l'interfaccia grafica su un grafico. Passa 0 per il grafico corrente, un nome per il tuo programma e un numero di sottofinestra per gli indicatori. Restituisce true se l'operazione è andata a buon fine.

OnInit

Gui_Destroy

Rimuove l'interfaccia grafica e tutto ciò che essa visualizzava.

OnDeinit

Gui_ChartEvent

Fornisce l'evento del grafico (mouse, tasti, clic) alla libreria.

OnChartEvent

Timer GUI

Gestisce i timer della libreria: animazioni, notifiche, contatori.

OnTimer

Aggiornamento dell'interfaccia utente

Ricolora ciò che è cambiato. Passa true per ridipingere tutto.

Fine di ciascun gestore

Gui_NextEvent

Prende l'evento successivo dalla coda (clic, modifica, risultato di dialogo, richiesta di scambio). Restituisce false quando la coda è vuota.

Ciclo degli eventi

Gui_Add

Crea un elemento e ne restituisce l'ID. È possibile specificare il tipo, l'elemento padre, un nome, il testo e le coordinate x, y, larghezza e altezza.

OnInit

Gui_Set

Modifica una proprietà o esegue un'azione su un elemento. Restituisce -1 e registra una riga se l'elemento non lo supporta.

Ovunque

Gui_Get

Legge una proprietà come testo.

Ovunque

Gui_GetNum

Legge una proprietà come un numero.

Ovunque

Gui_SetArray

Invia un elenco di numeri a un elemento, ad esempio un'intera serie di un grafico.

Ovunque

Gui_AddImage

Registra un'immagine da un array di pixel ARGB, in modo che gli elementi possano visualizzarla. Lo strumento "Image to Code" presente sul sito web crea questo array a partire da un'immagine PNG.

OnInit

Gui_Find

Trova un elemento tramite il suo nome.

Ovunque

Gui_PortaInFronte

Sposta l'interfaccia grafica sopra gli oggetti del grafico disegnati successivamente.

Dopo aver creato gli oggetti del grafico

Questa è l'intera interfaccia. Tutto il resto in questa guida è una combinazione di queste 15 chiamate.

3. Esegui la demo completa

  1. Apri un grafico. Una finestra di grandi dimensioni, ad esempio 1280 x 720 pixel o superiore, mostra il maggior numero di informazioni.
  2. Trascina GUI_Graphic_Library_FullDemo dal Navigatore sul grafico.
  3. Utilizza le schede di sezione in alto: Home, Casi d'uso, Pulsanti, Input, Selettori, Dati, Grafici, Layout, Feedback, Trading e Impostazioni.

La versione demo non invia mai ordini a meno che non si imposti l'input InpLiveTrading su true. Su un conto reale, è consigliabile disattivarlo. Se si chiude la finestra principale, l'Expert Advisor si chiude automaticamente.

Utilizza GUI_Graphic_Library_ElementTests quando desideri esaminare un elemento alla volta: fai clic su un gruppo nella relativa finestra di selezione.

Una dashboard realizzata esclusivamente con gli elementi della libreria.

4. Il tuo primo pannello

Questo è un Expert Advisor completo: una finestra con una casella per la dimensione del lotto, un pulsante Acquista e una riga di stato. Non effettua operazioni di trading; visualizza un messaggio.

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

Lo schema non cambia mai:

  1. OnInit crea l'interfaccia grafica e i relativi elementi.
  2. OnChartEvent e OnTimer inviano eventi alla libreria, leggono la coda e chiamano Gui_Update.
  3. OnDeinit distrugge l'interfaccia grafica.

5. Come pensa la biblioteca

  • ID. Gui_Add restituisce un ID intero. Conserva gli ID che ti servono oppure trovane uno in seguito per nome con Gui_Find("nome"). L'ID 0 è l'interfaccia grafica stessa: tema, notifiche, finestre di dialogo, contatori.
  • Elementi padre. Ogni elemento viene aggiunto a un elemento padre, che può essere una finestra o un contenitore. Finestre, menu ed etichette dei prezzi utilizzano l'elemento padre 0. Per una scheda, l'elemento padre è l'elemento tabs e l'ID restituito è la pagina a cui vengono aggiunti gli elementi figli.
  • Proprietà. Gui_Set(id, proprietà, testo, a, b, c, d) modifica una proprietà o esegue un'azione. Il testo va nell'argomento testo; numeri, colori ed enumerazioni vanno negli argomenti da a a d. Gui_Get legge il testo e Gui_GetNum legge i numeri.
  • Eventi. La libreria mette in coda le azioni dell'utente. Leggi la coda con Gui_NextEvent.
  • Le coordinate sono espresse in pixel con una scala del 100%. La libreria le moltiplica automaticamente per la scala di visualizzazione di Windows.

Se si passa una proprietà non supportata da un elemento, non si verifica alcun errore: la chiamata restituisce -1 e viene scritta una riga nel registro degli esperti.

6. I compiti che svolgerai più spesso

Leggi cosa ha digitato o scelto l'utente

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

Schede

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

Tavoli

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

Un clic su una cella pulsante invia l'evento GUI_EVENT_CELL_BUTTON con la riga in lparam e la colonna in dparam.

Grafici

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

Dialoghi e brindisi

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

Temi e colori

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

Ricorda finestre e valori

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

Entrambi utilizzano piccoli file di testo. Non vengono utilizzate variabili globali del terminale.

Fai qualcosa ogni secondo

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 pannello di trading con una funzione di ordine personalizzata

Il modulo d'ordine, il pannello delle posizioni e il calcolatore del rischio leggono l'account e il simbolo, quindi ti mostrano gli eventi. Non inviano mai ordini. Sei tu a decidere cosa succede quando l'utente clicca su Acquista o Vendi.

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

Prima di inviare ordini reali, esegui una prova su un conto demo. Verifica inoltre che la dimensione del lotto sia confrontata con i valori minimi, massimi e con lo step del simbolo, e che la distanza di stop sia confrontata con il livello di stop del broker.

Le posizioni funzionano allo stesso modo: aggiungi GUI_OBJ_POSITIONS, quindi reagisci a GUI_EVENT_POSITION (lparam è il ticket, dparam è 1 per Chiudi e 2 per Modifica).

8. Utilizzo in un indicatore

Un indicatore può disegnare l'interfaccia grafica in una propria finestra secondaria. Passa il numero di tale finestra 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 ;
  }

Per disegnare sul grafico dei prezzi a partire da un indicatore, utilizzare la sottofinestra 0. Le due demo degli indicatori sono esempi completi. Esiste un'interfaccia grafica per ogni programma e grafico, quindi assegnare a ciascun programma un nome univoco per l'interfaccia.

9. MetaTrader 4 e MetaTrader 5

Argomento

MetaTrader 4

MetaTrader 5

File della biblioteca

.ex4

.ex5

Menu contestuale

Tieni premuto il pulsante sinistro del mouse oppure Ctrl + clic

clic con il tasto destro del mouse

Rotellina del mouse

Non inviato dal terminale. Utilizzare le barre di scorrimento.

Opere

Profondità del mercato

Aggiungi tu stesso i livelli

Legge il libro del mercato

Calendario economico

Aggiungi tu stesso le righe

Carichi dal terminale

Digitare

Mappa chiave degli Stati Uniti integrata

Funziona qualsiasi layout di tastiera

10. Se qualcosa non funziona

Problema

Cosa fare

Sul grafico non compare nulla.

Verifica che Gui_Create abbia restituito true e leggi le ultime righe della scheda Esperti.

Impossibile aprire GUI_Graphic_Library.mqh con il compilatore.

Il file di inclusione non si trova nella cartella Include della stessa cartella dati del programma.

Impossibile caricare la libreria in fase di esecuzione.

Il file .ex5 o .ex4 non è presente nelle Librerie oppure il suo nome è stato modificato.

Un valore modificato nel codice non viene visualizzato

Chiama la funzione Gui_Update() alla fine del tuo gestore eventi.

La scheda Esperti indica che una proprietà non è supportata

Tale proprietà non esiste per quell'elemento. Consultare la documentazione API.

Due programmi si contendono la stessa classifica

Assegna a ciascuno un nome univoco in Gui_Create.

Le linee del grafico coprono l'interfaccia grafica

Chiama la funzione Gui_BringToFront() dopo aver creato gli oggetti del grafico.

Il testo è troppo piccolo o troppo grande

Imposta Gui_Set(0,GUI_PROP_SCALE,"",1.5), oppure riavvia il terminale dopo aver modificato la scala di Windows.

Vuoi vedere cosa sta facendo la biblioteca

Attiva Gui_Set(0,GUI_PROP_DEBUG,"",true) per la sovrapposizione di debug.

11. Consigli

  • Chiama Gui_Update() alla fine di ogni gestore. Ridisegna solo ciò che è cambiato.
  • Le schede nascoste e le finestre compresse non richiedono un ridisegno, quindi aggiornarle tramite un timer è un'operazione poco costosa.
  • Utilizza GUI_PROP_MAX_FPS per limitare la frequenza dei fotogrammi se esegui molti grafici.
  • Utilizza GUI_PROP_CLEAR_EVENTS alla fine di OnInit per eliminare gli eventi accodati durante la creazione del pannello.
  • Utilizza lo strumento "Image to Code" sul sito web per convertire un logo o un'icona PNG in un array per la funzione Gui_AddImage.
  • I nuovi valori dell'enumerazione vengono aggiunti solo alla fine, in modo che i programmi compilati con un file di inclusione precedente continuino a funzionare dopo un aggiornamento. Sostituire contemporaneamente il file di libreria e il file di inclusione.

12. Dove andare dopo?

La tua opinione è ben accetta. Per domande o suggerimenti di miglioramento, scrivi nei commenti del prodotto o inviami un messaggio su MQL5.com.