Bibliothèque graphique GUI pour MetaTrader : guide d’installation et d’utilisation
✔️ Bibliothèque graphique GUI MT4© : https://www.mql5.com/en/market/product/206760
✔️ Bibliothèque graphique GUI MT5© : https://www.mql5.com/en/market/product/206761
✔️ Documentation complète, galerie d'éléments et outil Image to Code⁵ : https://www.betasoft.dev/gui-graphic-library
Un tableau des positions, un bon de commande et un graphique en direct.
La bibliothèque graphique GUI offre à vos Expert Advisors et indicateurs une interface complète : fenêtres, onglets, menus, tableaux, graphiques, sélecteurs, boîtes de dialogue et widgets de trading. Tout est affiché sur une seule interface, le même code est compatible avec MetaTrader 4 et MetaTrader 5, et l’API complète ne comporte que 15 fonctions.
Ce guide vous accompagne du téléchargement à la création de votre premier panneau de contrôle, puis vous présente les tâches les plus fréquentes. Chaque exemple de code utilise uniquement le fichier d'en-tête public ; vous pouvez donc le copier-coller dans votre propre programme.
Une petite partie des 78 éléments : boutons, champs de saisie, curseurs et onglets.
1. Avant de commencer
- MetaTrader 4 ou MetaTrader 5 sous Windows. Les polices et les icônes suivent l'échelle d'affichage de Windows (100, 125, 150 et 200 %).
- MetaEditor, pour compiler les démos et vos propres programmes.
- Aucune option à autoriser dans les paramètres du terminal : la bibliothèque n’utilise aucune DLL, n’effectue aucune requête web et n’utilise aucune variable globale du terminal.
- Les versions MT4 et MT5 sont des produits distincts. Installez celle qui correspond à votre terminal.
2. Installation
- Dans le terminal, choisissez Fichier, puis Ouvrir le dossier de données.
- Ouvrez le dossier MQL5 (MetaTrader 5) ou le dossier MQL4 (MetaTrader 4).
- Copiez chaque fichier dans le dossier indiqué dans le tableau ci-dessus : Bibliothèques, Inclure, Experts et Indicateurs.
- Ouvrez chaque démo dans MetaEditor et appuyez sur F7. Le résultat devrait afficher 0 erreurs, 0 avertissements.
- De retour dans le terminal, actualisez le Navigateur (clic droit, Actualiser) pour que les nouveaux programmes apparaissent.
Les dossiers devraient ressembler à ceci :
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
Ne renommez pas le fichier de bibliothèque. Le fichier d'en-tête le charge sous ce nom.
Vérifications après l'installation
| Vérifier | Où |
|---|---|
| Le fichier .ex5 (ou .ex4) se trouve dans les bibliothèques. | Dossier de données |
| Le fichier .mqh se trouve dans Include | Dossier de données |
| La démo se compile sans erreur. | MétaÉditeur |
| La démo affiche une fenêtre sur le graphique | Graphique |
| L'onglet Experts ne contient aucune ligne « non prise en charge ». | Terminal, boîte à outils |
Que contient le fichier GUI_Graphic_Library.mqh ?
Le fichier d'en-tête est volontairement court. Au-dessus du bloc d'importation, il déclare les énumérations (types d'objets, propriétés, événements, thèmes et icônes). Le bloc d'importation situé en dessous charge la bibliothèque compilée et liste ses 15 fonctions. MetaTrader 5 charge le fichier .ex5 et MetaTrader 4 charge le fichier .ex4, choisi par le compilateur. Vous incluez le fichier, vous ne le modifiez jamais.
#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
Les 15 fonctions dans l'ordre où elles apparaissent :
| Fonction | Ce que cela fait | Là où vous l'appelez |
|---|---|---|
| Version de l'interface graphique | Renvoie la version de la bibliothèque sous forme de texte. | N'importe où |
| Créer une interface graphique | Lance l'interface graphique sur un graphique. Indiquez 0 pour le graphique actuel, un nom pour votre programme et un numéro de sous-fenêtre pour les indicateurs. Renvoie vrai en cas de succès. | OnInit |
| Détruire l'interface graphique | Supprime l'interface graphique et tout ce qu'elle affichait. | OnDeinit |
| Événement Gui_Chart | Transmet l'événement du graphique (souris, touches, clics) à la bibliothèque. | Événement OnChart |
| Minuteur d'interface graphique | Exécute les minuteurs de la bibliothèque : animations, notifications, compteurs. | Minuteur |
| Mise à jour de l'interface graphique | Repeint ce qui a changé. Utilisez « true » pour tout repeindre. | Fin de chaque gestionnaire |
| Événement Gui_Next | Prend l'événement suivant dans la file d'attente (clic, modification, résultat de dialogue, demande d'échange). Renvoie faux si la file d'attente est vide. | boucle d'événements |
| Ajout d'interface graphique | Crée un élément et renvoie son identifiant. Vous devez fournir le type, le parent, un nom, le texte, ainsi que les coordonnées x, y, la largeur et la hauteur. | OnInit |
| Ensemble d'interfaces graphiques | Modifie une propriété ou exécute une action sur un élément. Renvoie -1 et consigne une ligne si l'élément ne le prend pas en charge. | N'importe où |
| Gui_Get | Lit une propriété sous forme de texte. | N'importe où |
| Gui_GetNum | Interprète une propriété sous forme de nombre. | N'importe où |
| Gui_SetArray | Envoie une liste de nombres à un élément, par exemple une série graphique complète. | N'importe où |
| Gui_AjouterImage | Enregistre une image à partir d'un tableau de pixels ARGB, afin que les éléments puissent l'afficher. L'outil « Image vers code » du site web crée ce tableau à partir d'un fichier PNG. | OnInit |
| Gui_Find | Recherche l'identifiant d'un élément par son nom. | N'importe où |
| Gui_BringToFront | Déplace l'interface graphique au-dessus des objets graphiques que vous avez dessinés après elle. | Après avoir créé des objets graphiques |
Voilà l'interface complète. Tout le reste de ce guide est une combinaison de ces 15 appels.
3. Lancez la démo complète
- Ouvrez un graphique. Une grande fenêtre, par exemple de 1280 x 720 pixels ou plus, offre le meilleur affichage.
- Faites glisser GUI_Graphic_Library_FullDemo depuis le Navigateur vers le graphique.
- Utilisez les onglets de section en haut : Accueil, Cas d’utilisation, Boutons, Entrées, Sélecteurs, Données, Graphiques, Mise en page, Commentaires, Trading et Paramètres.
La démo n'envoie jamais d'ordres sauf si vous activez l'option InpLiveTrading. Laissez-la désactivée sur un compte réel. Si vous fermez la fenêtre principale, le conseiller expert se ferme automatiquement.
Utilisez GUI_Graphic_Library_ElementTests lorsque vous souhaitez examiner un élément à la fois : cliquez sur un groupe dans sa fenêtre de sélection.
Un tableau de bord construit uniquement à partir des éléments de la bibliothèque.
4. Votre premier panneau
Il s'agit d'un Expert Advisor complet : une fenêtre avec un champ de sélection de la taille du lot, un bouton « Acheter » et une barre d'état. Il n'effectue aucune transaction ; il affiche un message.
#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(); }
Le schéma ne change jamais :
- OnInit crée l'interface graphique et ses éléments.
- OnChartEvent et OnTimer transmettent des événements à la bibliothèque, lisent la file d'attente et appellent Gui_Update.
- OnDeinit détruit l'interface graphique.
5. Comment la bibliothèque réfléchit
- Gui_Add renvoie un identifiant numérique. Conservez les identifiants dont vous avez besoin ou retrouvez-en un ultérieurement par son nom avec Gui_Find("nom"). L'identifiant 0 correspond à l'interface graphique elle-même : thème, notifications, boîtes de dialogue, compteurs.
- Éléments parents. Chaque élément est ajouté à un parent : une fenêtre ou un conteneur. Les fenêtres, les menus et les étiquettes de prix utilisent le parent 0. Pour un onglet, le parent est l’élément « onglets » et l’identifiant renvoyé correspond à la page à laquelle vous ajoutez les éléments enfants.
- Propriétés. La fonction Gui_Set(id, property, text, a, b, c, d) modifie une propriété ou exécute une action. Le texte est placé dans l'argument text ; les nombres, les couleurs et les énumérations sont placés dans les arguments a à d. Gui_Get lit le texte et Gui_GetNum lit les nombres.
- Événements. La bibliothèque enregistre les actions de l'utilisateur. Consultez la file d'attente avec Gui_NextEvent.
- Les coordonnées sont exprimées en pixels à l'échelle 100 %. La bibliothèque les multiplie automatiquement par l'échelle d'affichage Windows.
Si vous transmettez une propriété qu'un élément ne prend pas en charge, rien ne se casse : l'appel renvoie -1 et une ligne est écrite dans le journal des experts.
6. Les tâches que vous effectuerez le plus souvent
Lisez ce que l'utilisateur a saisi ou choisi.
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);
Onglets
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 );
Tables
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 sur une cellule de bouton envoie GUI_EVENT_CELL_BUTTON avec la ligne dans lparam et la colonne dans dparam.
Graphiques
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 );
Dialogues et toasts
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 );
Thèmes et couleurs
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 );
N'oubliez pas les fenêtres et les valeurs
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
Les deux utilisent de petits fichiers texte. Aucune variable globale du terminal n'est utilisée.
Faites quelque chose chaque seconde
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 panneau de trading avec votre propre fonction de commande
Le carnet d'ordres, le panneau de positions et le calculateur de risque analysent le compte et le symbole, puis vous informent des événements. Ils n'envoient jamais d'ordres. Vous décidez de ce qui se passe lorsque l'utilisateur clique sur « Acheter » ou « Vendre ».
#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(); }
Testez d'abord sur un compte démo. Avant de passer des ordres réels, vérifiez également la taille du lot par rapport aux valeurs minimales, maximales et d'incrémentation du symbole, ainsi que la distance du stop par rapport au niveau de stop de votre courtier.
Les positions fonctionnent de la même manière : ajoutez GUI_OBJ_POSITIONS, puis réagissez à GUI_EVENT_POSITION (lparam est le ticket, dparam vaut 1 pour Fermer et 2 pour Modifier).
8. Son utilisation comme indicateur
Un indicateur peut afficher l'interface graphique dans sa propre sous-fenêtre. Transmettez le numéro de cette fenêtre à 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 ; }
Pour tracer des lignes sur le graphique des prix à partir d'un indicateur, utilisez la sous-fenêtre 0. Les deux exemples d'indicateurs sont complets. Chaque programme et chaque graphique possède sa propre interface graphique ; attribuez donc un nom d'interface graphique distinct à chaque programme.
9. MetaTrader 4 et MetaTrader 5
| Sujet | MetaTrader 4 | MetaTrader 5 |
|---|---|---|
| fichier de bibliothèque | .ex4 | .ex5 |
| Menu contextuel | Appuyez longuement sur le bouton gauche, ou Ctrl + clic | clic droit |
| Molette de la souris | Message non envoyé par le terminal. Utilisez les barres de défilement. | Travaux |
| Profondeur du marché | Ajoutez les niveaux vous-même | Lit le livre du marché |
| Calendrier économique | Ajoutez les lignes vous-même | Chargements depuis le terminal |
| Dactylographie | Carte des touches américaines intégrée | Toutes les configurations de clavier fonctionnent |
10. Si quelque chose ne fonctionne pas
| Problème | Ce qu'il faut faire |
|---|---|
| Rien n'apparaît sur le graphique | Vérifiez que Gui_Create a renvoyé la valeur « true » et lisez les dernières lignes de l'onglet Experts. |
| Le compilateur ne peut pas ouvrir GUI_Graphic_Library.mqh | Le fichier d'inclusion ne se trouve pas dans le dossier Include du même dossier de données que votre programme. |
| Le programme ne peut pas charger la bibliothèque lors de l'exécution. | Le fichier .ex5 ou .ex4 est absent des bibliothèques, ou son nom a été modifié. |
| Une valeur modifiée dans le code ne s'affiche pas. | Appelez Gui_Update() à la fin de votre gestionnaire. |
| L'onglet Experts indique qu'une propriété n'est pas prise en charge | Cette propriété n'existe pas pour cet élément. Consultez la documentation de l'API. |
| Deux programmes s'affrontent sur un même graphique | Donnez à chacun un nom différent dans Gui_Create. |
| Les lignes du graphique recouvrent l'interface graphique. | Appelez Gui_BringToFront() après avoir créé les objets graphiques. |
| Le texte est trop petit ou trop grand | Définissez Gui_Set(0,GUI_PROP_SCALE,"",1.5), ou redémarrez le terminal après avoir modifié l'échelle Windows. |
| Vous voulez voir ce que fait la bibliothèque | Activez Gui_Set(0,GUI_PROP_DEBUG,"",true) pour la superposition de débogage. |
11. Conseils
- Appelez Gui_Update() à la fin de chaque gestionnaire. Cette fonction ne redessine que les éléments qui ont changé.
- Les onglets masqués et les fenêtres réduites n'entraînent pas de rafraîchissement, leur mise à jour à l'aide d'une minuterie est donc peu coûteuse.
- Utilisez GUI_PROP_MAX_FPS pour limiter la fréquence d'images si vous exécutez de nombreux graphiques.
- Utilisez GUI_PROP_CLEAR_EVENTS à la fin de OnInit pour supprimer les événements mis en file d'attente pendant la construction du panneau.
- Utilisez l'outil Image to Code sur le site web pour convertir un logo ou une icône PNG en un tableau pour Gui_AddImage.
- Les nouvelles valeurs d'énumération ne sont ajoutées qu'à la fin ; ainsi, les programmes compilés avec un fichier d'en-tête plus ancien continuent de fonctionner après une mise à jour. Remplacez simultanément le fichier de bibliothèque et le fichier d'en-tête.
12. Où aller ensuite ?
- Galerie d'éléments, installation, guide, référence API, conversion d'images en code et aide : https://www.betasoft.dev/gui-graphic-library
- Version MetaTrader 5 : https://www.mql5.com/en/market/product/206761
- Version MetaTrader 4 : https://www.mql5.com/en/market/product/206760
Votre avis est le bienvenu. Pour toute question ou suggestion d'amélioration, veuillez laisser un commentaire sur le produit ou m'envoyer un message sur MQL5.com.





