MetaTrader için Grafiksel GUI Kütüphanesi: Kurulum ve Kullanım Kılavuzu

MetaTrader için Grafiksel GUI Kütüphanesi: Kurulum ve Kullanım Kılavuzu

10 Kasım 2026, 16:47
Omar Alkassar
0
1

✔️ GUI Grafik Kütüphanesi MT4©:   https://www.mql5.com/en/market/product/206760

✔️ GUI Grafik Kütüphanesi MT5©:   https://www.mql5.com/en/market/product/206761

✔️ Tam dokümantasyon, öğe galerisi ve Görüntüden Koda Dönüştürme aracı5:   https://www.betasoft.dev/gui-graphic-library



Pozisyon tablosu, emir fişi ve canlı grafik.

GUI Grafik Kütüphanesi, Uzman Danışmanlarınıza ve göstergelerinize eksiksiz bir arayüz sunar: pencereler, sekmeler, menüler, tablolar, grafikler, seçiciler, diyaloglar ve işlem araçları. Her şey tek bir tuval üzerinde çizilir, aynı kod MetaTrader 4 ve MetaTrader 5'te çalışır ve tüm API 15 fonksiyondan oluşur.

Bu kılavuz, indirme işleminden ilk çalışma panelinize ve ardından en sık yapacağınız görevlere kadar size yol gösterir. Her kod örneği yalnızca genel include dosyasını kullanır, böylece onu kendi programınıza yapıştırabilirsiniz.

78 öğenin küçük bir kısmı: düğmeler, giriş alanları, kaydırıcılar ve sekmeler.

1. Başlamadan önce

  • Windows işletim sisteminde MetaTrader 4 veya MetaTrader 5. Yazı tipleri ve simgeler Windows ekran ölçeğine (yüzde 100, 125, 150 ve 200) göre ayarlanır.
  • MetaEditor, demoları ve kendi programlarınızı derlemek için kullanılır.
  • Terminal seçeneklerinde izin verilecek hiçbir şey yok: kütüphane DLL kullanmıyor, web isteği yapmıyor ve terminalde genel değişkenler kullanmıyor.
  • MT4 ve MT5 sürümleri ayrı ürünlerdir. Terminalinize uygun olanı yükleyin.

2. Kurulum

  1. Terminalde Dosya'yı, ardından Veri Klasörünü Aç'ı seçin.
  2. MetaTrader 5'te MQL5 klasörünü veya MetaTrader 4'te MQL4 klasörünü açın.
  3. Yukarıdaki tabloda gösterilen klasörlere her bir dosyayı kopyalayın: Kütüphaneler, Dahil Edilecekler, Uzmanlar ve Göstergeler.
  4. Her bir demoyu MetaEditor'da açın ve F7 tuşuna basın. Sonuç 0 hata, 0 uyarı şeklinde olmalıdır.
  5. Terminale geri dönün ve yeni programların görünmesi için Gezgini yenileyin (sağ tıklayın, Yenile).

Klasörler şu şekilde görünmelidir:

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

Kütüphane dosyasının adını değiştirmeyin. Dahil edilecek dosya, onu bu adla yükler.

Kurulum sonrası kontroller

Kontrol etmek

Nerede

.ex5 (veya .ex4) dosyası Kütüphaneler klasöründedir.

Veri klasörü

.mqh dosyası Include klasöründe yer almaktadır.

Veri klasörü

Demo, sıfır hatayla derlendi.

MetaEditör

Demo, grafik üzerinde bir pencere gösteriyor.

Çizelge

Uzmanlar sekmesinde "desteklenmiyor" ibaresi bulunmamaktadır.

Terminal, Araç Kutusu

GUI_Graphic_Library.mqh dosyasının içeriği nedir?

Dahil edilecek dosya kasıtlı olarak küçüktür. İçe aktarma bloğunun üstünde enum'lar (nesne türleri, özellikler, olaylar, temalar ve simgeler) tanımlanır. Alttaki içe aktarma bloğu derlenmiş kütüphaneyi yükler ve 15 işlevini listeler. MetaTrader 5, derleyici tarafından seçilen .ex5 dosyasını, MetaTrader 4 ise .ex4 dosyasını yükler. Dosyayı dahil edersiniz, asla düzenlemezsiniz.

 #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

15 işlev, göründükleri sırayla:

İşlev

Ne işe yarar?

Siz buna ne diyorsunuz?

Gui_Sürümü

Kütüphane sürümünü metin olarak döndürür.

Herhangi bir yer

Gui_Create

Grafik üzerinde grafik kullanıcı arayüzünü (GUI) başlatır. Geçerli grafik için 0, programınız için bir ad ve göstergeler için bir alt pencere numarası girin. Başarılı olduğunda true değerini döndürür.

OnInit

Gui_Yok Et

Kullanıcı arayüzünü ve çizdiği her şeyi siler.

OnDeinit

Gui_ChartEvent

Grafik olaylarını (fare, klavye tuşları, tıklamalar) kütüphaneye iletir.

Grafik ÜzerindeOlay

Gui_Timer

Kütüphanenin zamanlayıcılarını çalıştırır: animasyonlar, bildirim mesajları, sayaçlar.

OnTimer

Gui_Güncelle

Değişenleri yeniden boyar. Her şeyi yeniden boyamak için true değerini geçirin.

Her bir işleyicinin sonu

Gui_SonrakiOlay

Sıradaki olayı alır (tıklama, değişiklik, diyalog sonucu, işlem isteği). Sıra boş olduğunda false döndürür.

Olay döngüsü

Gui_Add

Bir öğe oluşturur ve kimliğini döndürür. Türünü, üst öğesini, adını, metnini ve x, y, genişlik, yükseklik değerlerini belirtmeniz gerekir.

OnInit

Gui_Set

Bir öğenin özelliğini değiştirir veya bir eylemi çalıştırır. Öğenin bu özelliği desteklememesi durumunda -1 döndürür ve bir satır kaydeder.

Herhangi bir yer

Gui_Get

Bir özelliği metin olarak okur.

Herhangi bir yer

Gui_GetNum

Bir özelliği sayı olarak okur.

Herhangi bir yer

Gui_SetArray

Bir öğeye sayı listesi gönderir, örneğin tüm bir grafik serisi.

Herhangi bir yer

Gui_AddImage

ARGB piksellerinden oluşan bir diziden bir resim kaydeder, böylece öğeler bu resmi gösterebilir. Web sitesindeki "Resmi Koda Dönüştürme" aracı bu diziyi bir PNG dosyasından oluşturur.

OnInit

Gui_Find

Adına göre bir öğenin kimliğini bulur.

Herhangi bir yer

Gui_BringToFront

Kullanıcı arayüzünü, daha sonra çizdiğiniz grafik nesnelerinin üzerine taşır.

Grafik nesneleri oluşturduktan sonra

Arayüzün tamamı bu kadar. Bu kılavuzdaki diğer her şey bu 15 çağrının birleşiminden oluşuyor.

3. Tam demoyu çalıştırın

  1. Bir grafik açın. Örneğin 1280 x 720 piksel veya daha büyük bir pencere en fazla veriyi gösterir.
  2. GUI_Graphic_Library_FullDemo öğesini Navigator'dan haritanın üzerine sürükleyin.
  3. Üst kısımdaki bölüm sekmelerini kullanın: Ana Sayfa, Kullanım Örnekleri, Düğmeler, Giriş Alanları, Seçiciler, Veriler, Grafikler, Düzen, Geri Bildirim, Alım Satım ve Ayarlar.

Demo hesap, InpLiveTrading girişini true olarak ayarlamadığınız sürece asla emir göndermez. Gerçek hesapta bu ayarı kapalı bırakın. Ana pencereyi kapatırsanız, Uzman Danışman da otomatik olarak kaldırılır.

Tek seferde yalnızca bir öğeye bakmak istediğinizde GUI_Graphic_Library_ElementTests'i kullanın: seçici penceresinde bir gruba tıklayın.

Sadece kütüphanenin öğelerinden oluşturulmuş bir kontrol paneli.

4. İlk paneliniz

Bu, eksiksiz bir Uzman Danışmanıdır: işlem hacmi kutusu, Al düğmesi ve durum satırı içeren bir pencere. İşlem yapmaz; sadece bir mesaj gösterir.

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

Desen asla değişmez:

  1. OnInit, GUI'yi ve öğeleri oluşturur.
  2. OnChartEvent ve OnTimer, kütüphaneye olaylar gönderir, kuyruğu okur ve Gui_Update'i çağırır.
  3. OnDeinit, GUI'yi yok eder.

5. Kütüphanenin düşünme biçimi

  • Kimlikler. Gui_Add bir tamsayı kimlik döndürür. İhtiyacınız olan kimlikleri saklayın veya daha sonra Gui_Find("name") ile isme göre birini bulun. Kimlik 0, GUI'nin kendisidir: tema, bildirimler, diyaloglar, sayaçlar.
  • Ebeveynler. Her öğe bir ebeveyne, bir pencereye veya bir kapsayıcıya eklenir. Pencereler, menüler ve fiyat etiketleri 0 numaralı ebeveyni kullanır. Bir sekme için ebeveyn, sekmeler öğesidir ve döndürülen kimlik, alt öğeleri eklediğiniz sayfadır.
  • Özellikler. Gui_Set(id, property, text, a, b, c, d) bir özelliği değiştirir veya bir eylemi çalıştırır. Metin, text argümanına; sayılar, renkler ve enum'lar ise a'dan d'ye kadar olan argümanlara yazılır. Gui_Get metni, Gui_GetNum ise sayıları okur.
  • Olaylar. Kütüphane, kullanıcının yaptıklarını sıraya alır. Sırayı Gui_NextEvent ile okuyun.
  • Koordinatlar %100 ölçekte piksel cinsindendir. Kütüphane bunları sizin için Windows ekran ölçeğiyle çarpar.

Bir öğenin desteklemediği bir özelliği iletirseniz, hiçbir şey bozulmaz: çağrı -1 değerini döndürür ve Uzmanlar günlüğüne bir satır yazılır.

6. En sık yapacağınız işler

Kullanıcının yazdıklarını veya seçtiklerini okuyun.

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

Sekmeler

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

Tablolar

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

Bir düğme hücresine tıklama, lparam'da satır numarasını ve dparam'da sütun numarasını içeren GUI_EVENT_CELL_BUTTON olayını gönderir.

Grafikler

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

Diyaloglar ve kadeh kaldırmalar

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

Temalar ve renkler

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

Pencereleri ve değerleri hatırlayın.

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

Her ikisi de küçük metin dosyaları kullanıyor. Terminalde global değişkenler kullanılmıyor.

Her saniye bir şey yap.

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. Kendi sipariş fonksiyonunuza sahip bir ticaret paneli

Emir fişi, pozisyon paneli ve risk hesaplayıcısı hesabı ve sembolü okuyarak size olaylar sunar. Asla emir göndermezler. Kullanıcı Al veya Sat düğmesine tıkladığında ne olacağına siz karar verirsiniz.

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

Öncelikle demo hesapta test edin. Gerçek emir göndermeden önce, lot boyutunu sembolün minimum, maksimum ve adım değerleriyle ve stop mesafesini de aracı kurumun stop seviyesiyle karşılaştırın.

Pozisyonlar da aynı şekilde çalışır: GUI_OBJ_POSITIONS'ı ekleyin, ardından GUI_EVENT_POSITION'a tepki verin (lparam bilet, dparam ise Kapat için 1 ve Değiştir için 2'dir).

8. Bunu bir göstergede kullanmak

Bir gösterge, GUI'yi kendi alt penceresinde çizebilir. Bu pencerenin numarasını Gui_Create'e iletin:

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

Bir göstergeden fiyat grafiğine çizim yapmak için 0 numaralı alt pencereyi kullanın. İki gösterge demosu eksiksiz örneklerdir. Her program ve grafik için bir GUI olduğundan, her programa kendi GUI adını verin.

9. MetaTrader 4 ve MetaTrader 5

Başlık

MetaTrader 4

MetaTrader 5

Kütüphane dosyası

.ex4

.ex5

Bağlam menüsü

Sol düğmeye uzun süre basın veya Ctrl + tıklayın.

Sağ tıklayın

Fare tekerleği

Terminalden gönderilmedi. Kaydırma çubuklarını kullanın.

Eserler

piyasa derinliği

Seviyeleri kendiniz ekleyin.

Piyasa kitabını okuyor.

Ekonomik takvim

Satırları kendiniz ekleyin.

Terminalden gelen yükler

Yazma

Dahili ABD klavye haritası

Her klavye düzeni çalışır.

10. Bir şey çalışmıyorsa

Sorun

Ne yapalım

Grafikte hiçbir şey görünmüyor.

Gui_Create'in true döndürdüğünü kontrol edin ve Uzmanlar sekmesinin son satırlarını okuyun.

Derleyici GUI_Graphic_Library.mqh dosyasını açamıyor.

Dahil edilecek dosya, programınızın bulunduğu veri klasöründeki Include klasöründe değil.

Program, çalışma zamanında kütüphaneyi yükleyemiyor.

.ex5 veya .ex4 dosyası Kütüphaneler'de bulunmuyor veya adı değiştirilmiş.

Kodda değiştirilen bir değer görünmez.

İşleyici fonksiyonunuzun sonunda Gui_Update() fonksiyonunu çağırın.

Uzmanlar sekmesinde bir özelliğin desteklenmediği belirtiliyor.

Bu özellik o öğe için mevcut değil. API referansını kontrol edin.

İki program aynı grafikte yarışıyor.

Gui_Create fonksiyonunda her birine kendi adını verin.

Grafik çizgileri GUI'yi kapsar.

Grafik nesnelerini oluşturduktan sonra Gui_BringToFront() işlevini çağırın.

Metin çok küçük veya çok büyük.

Windows ölçeğini değiştirdikten sonra Gui_Set(0,GUI_PROP_SCALE,"",1.5) komutunu çalıştırın veya terminali yeniden başlatın.

Kütüphanenin neler yaptığını görmek istiyorsunuz.

Hata ayıklama katmanı için Gui_Set(0,GUI_PROP_DEBUG,"",true) seçeneğini etkinleştirin.

11. İpuçları

  • Her işleyici fonksiyonunun sonunda Gui_Update() fonksiyonunu çağırın. Bu fonksiyon yalnızca değişen kısımları yeniden çizer.
  • Gizli sekme sayfaları ve daraltılmış pencereler yeniden çizime neden olmaz, bu nedenle bunları bir zamanlayıcıdan güncellemek ucuzdur.
  • Çok sayıda grafik çalıştırıyorsanız kare hızını sınırlamak için GUI_PROP_MAX_FPS'yi kullanın.
  • Paneli oluştururken kuyruğa alınmış olayları silmek için OnInit'in sonunda GUI_PROP_CLEAR_EVENTS'i kullanın.
  • Web sitesindeki "Resmi Koda Dönüştür" aracını kullanarak bir PNG logosunu veya simgesini Gui_AddImage için bir diziye dönüştürün.
  • Yeni enum değerleri yalnızca sona eklenir, bu nedenle eski bir include dosyasıyla oluşturulan programlar güncellemeden sonra da çalışmaya devam eder. Kütüphane dosyasını ve include dosyasını birlikte değiştirin.

12. Bundan sonra nereye gideceğiz?

Görüşleriniz bizim için değerlidir. Sorularınız veya iyileştirme önerileriniz için lütfen ürün yorumlarına yazın veya MQL5.com adresinden bana mesaj gönderin .




Dosyalar: