Çizelge Olaylarının Tipleri

OnChartEvent() fonksiyonu kullanılarak işlenebilecek 9 tip olay vardır. Özel olaylar için, CHARTEVENT_CUSTOM 'dan CHARTEVENT_CUSTOM_LAST 'a kadar 65535 adet dahili tanımlayıcı mevcuttur. Özel bir olay oluşturmak için EventChartCustom() fonksiyonu kullanılabilir.

ENUM_CHART_EVENT

Tanıtıcı

Açıklama

CHARTEVENT_KEYDOWN

Tuş darbeleri

CHARTEVENT_MOUSE_MOVE

Fare hareketi, fare tıklamaları (CHART_EVENT_MOUSE_MOVE=true, çizelge için ayarlanmışsa)

CHARTEVENT_MOUSE_WHEEL

Fare tekerleğinin tıklanması veya kaydırılması (çizelge için CHART_EVENT_MOUSE_WHEEL=True ise)

CHARTEVENT_OBJECT_CREATE

Grafiksel nesne oluşturma olayı (CHART_EVENT_OBJECT_CREATE=true, çizelge için ayarlanmışsa)

CHARTEVENT_OBJECT_CHANGE

Grafiksel nesnenin özellikler penceresinden değiştirilmesi olayı

CHARTEVENT_OBJECT_DELETE

Grafiksel nesnenin silinmesi olayı (CHART_EVENT_OBJECT_DELETE=true, çizelge için ayarlanmışsa)

CHARTEVENT_CLICK

Çizelge üstünde tıklama olayı

CHARTEVENT_OBJECT_CLICK

Grafiksel nesne üzerinde tıklama olayı

CHARTEVENT_OBJECT_DRAG

Grafiksel nesne üzerinde sürükleyip bırakma

CHARTEVENT_OBJECT_ENDEDIT

'Düzenle' grafiksel nesnesinde metin düzenleme işinin bitmesi

CHARTEVENT_CHART_CHANGE

Özellikler iletişim penceresi ile çizelge boyutunun veya çizelge özelliklerinin değişmesi

CHARTEVENT_CUSTOM

Bir özel olaylar dizisindeki ilk olayın numarası

CHARTEVENT_CUSTOM_LAST

Bir özel olaylar dizisindeki son olayın numarası

Her olay tipi için, OnChartEvent() fonksiyonunun giriş parametreleri, mevcut olayı işleyebilmek için kesin değerlere sahiptir. Bu parametreler ile geçirilen olaylar ve değerler aşağıdaki tabloda listelenmiştir.

Olay

id parametresinin değeri

lparam parametresinin değeri

dparam parametresinin değeri

sparam parametresinin değeri

Tuş darbesi olayı

CHARTEVENT_KEYDOWN

basılmış bir tuşun kodu

Tekrar sayısı (kullanıcının tuşa basılı tutması sonucu tekrarlanan tuş darbelerinin sayısı)

Klavye tuşlarının durumunu tarif eden bir bit maskesinin dizgi değeri

Fare olayları (CHART_EVENT_MOUSE_MOVE=true çizelge için ayarlanmışsa)

CHARTEVENT_MOUSE_MOVE

X koordinatı

Y koordinatı

Fare tuşlarının durumunu tarif eden bir bit maskesinin string tipli değeri

Fare tekerleği olayı (çizelge için CHART_EVENT_MOUSE_WHEEL=true ise)

CHARTEVENT_MOUSE_WHEEL

Fare düğmelerinin ve tuşların durumu, fare imlecinin X ve Y koordinatları hakkında bilgi veren bayraklar. Açıklama için alttaki örneğe bakınız

Fare tekerleğinin kaydırılması işlemi için delta değeri

Grafiksel nesne oluşturulma olayı (if CHART_EVENT_OBJECT_CREATE=true çizelge için ayarlanmışsa)

CHARTEVENT_OBJECT_CREATE

Oluşturulan grafiksel nesnenin adı

Özellikler iletişim kutusu ile bir nesnenin özelliğinin değiştirilmesi olayı

CHARTEVENT_OBJECT_CHANGE

Değiştirilen grafiksel nesnenin adı

Grafiksel nesnenin silinmesi olayı (Eğer çizelge için CHART_EVENT_OBJECT_DELETE=true şeklinde ayar yapılmışsa)

CHARTEVENT_OBJECT_DELETE

Silinen grafiksel nesnenin ismi

Çizelge üzerinde fare tıklaması olayı

CHARTEVENT_CLICK

X koordinatı

Y koordinatı

Çizelge üzerindeki bir grafiksel nesnenin fare ile tıklanması olayı

CHARTEVENT_OBJECT_CLICK

X koordinatı

Y koordinatı

Olayın gerçekleştiği grafiksel nesnenin ismi

Grafiksel nesnenin fare ile sürüklenmesi olayı

CHARTEVENT_OBJECT_DRAG

Taşınan grafiksel nesnenin adı

LabelEdit grafiksel nesnesinin giriş kutusunda yapılan metin düzenleme işinin bitmesi olayı

CHARTEVENT_OBJECT_ENDEDIT

Metin düzenlemesi tamamlanan LabelEdit grafiksel nesnesinin adı

Özellikler iletişim kutusu ile çizelge boyutunun veya özelliklerinin değişimi olayı

CHARTEVENT_CHART_CHANGE

N sayısının altındaki kullanıcı olayının kimliği

CHARTEVENT_CUSTOM+N

EventChartCustom() fonksiyonu tarafından ayarlanmış değer

EventChartCustom() fonksiyonu tarafından ayarlanmış değer

EventChartCustom() fonksiyonu tarafından ayarlanmış değer

Örnek:

#define KEY_NUMPAD_5       12
#define KEY_LEFT           37
#define KEY_UP             38
#define KEY_RIGHT          39
#define KEY_DOWN           40
#define KEY_NUMLOCK_DOWN   98
#define KEY_NUMLOCK_LEFT  100
#define KEY_NUMLOCK_5     101
#define KEY_NUMLOCK_RIGHT 102
#define KEY_NUMLOCK_UP    104
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print(MQL5InfoString(MQL5_PROGRAM_NAME)," isimli uzman çalışıyor");
//--- nesne oluşturma olaylarını devreye sok
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- nesne silme olaylarını devreye sok
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- grafik özelliklerinin zorla güncellenmesi, olay işleme için hazırlık sağlar
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // Olay tanımlayıcı  
                  const long& lparam,   // long tipi olay parametresi
                  const double& dparam, // double tipi olay parametresi
                  const string& sparam  // string tipi olay parametresi
                  )
  {
//--- çizelge üzerinde sol fare tuşu tıklandı
   if(id==CHARTEVENT_CLICK)
     {
      Print("Çizelge üzerindeki fare tıklamasının koordinatları: x = ",lparam,"  y = ",dparam);
     }
//--- grafiksel nesne üzerinde fareye tıklandı
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("fare '"+sparam+"' isimli nesne üzerinde tıklandı");
     }
//--- tuşa basıldı
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("KEY_NUMLOCK_LEFT tuşuna basıldı");   break;
         case KEY_LEFT:          Print("KEY_LEFT tuşuna basıldı");           break;
         case KEY_NUMLOCK_UP:    Print("KEY_NUMLOCK_UP tuşuna basıldı");     break;
         case KEY_UP:            Print("KEY_UP tuşuna basıldı");             break;
         case KEY_NUMLOCK_RIGHT: Print("KEY_NUMLOCK_RIGHT tuşuna basıldı");  break;
         case KEY_RIGHT:         Print("KEY_RIGHT tuşuna basıldı");          break;
         case KEY_NUMLOCK_DOWN:  Print("KEY_NUMLOCK_DOWN tuşuna basıldı");   break;
         case KEY_DOWN:          Print("KEY_DOWN tuşuna basıldı");           break;
         case KEY_NUMPAD_5:      Print("KEY_NUMPAD_5 tuşuna basıldı");       break;
         case KEY_NUMLOCK_5:     Print("KEY_NUMLOCK_5 tuşuna basıldı");      break;
         default:                Print("listelenmemiş bir tuşa basıldı");
        }
      ChartRedraw();
     }
//--- nesne silindi
   if(id==CHARTEVENT_OBJECT_DELETE)
     {
      Print(sparam," isimli nesne silindi");
     }
//--- nesne oluşturuldı
   if(id==CHARTEVENT_OBJECT_CREATE)
     {
      Print(sparam," isimli nesne oluşturuldı");
     }
//--- nesne ya da tutturma noktasının koordinatları değiştirildi
   if(id==CHARTEVENT_OBJECT_DRAG)
     {
      Print(sparam," isimli nesnenin tutturma noktası koordinatları değiştirildi");
     }
//--- nesnenin Edit (düzenle) alanı içinde metni değişti
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
     {
      Print(sparam," isimli nesnenin Edit alanındaki metni değiştirildi");
     }
  }

CHARTEVENT_MOUSE_MOVE olayı için sparam parametresi klavye ve fare tuşlarının durumu hakkında bilgi içerir:

Bit

Açıklama

1

Sol fare tuşunun durumu

2

Sağ fare tuşunun durumu

3

SHIFT tuşunun durumu

4

CTRL tuşunun durumu

5

Orta fare tuşunun durumu

6

İlk ek fare tuşunun durumu

7

İkinci ek fare tuşunun durumu

Örnek:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- CHART_EVENT_MOUSE_MOVE mesajlarını devreye sok
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
// --- grafiğin içerik menüsünü devre dışı bırakın (sağda)
   ChartSetInteger(0,CHART_CONTEXT_MENU,0);     
// --- artı işaretini devre dışı bırak (orta düğmeden)
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,0); 
//--- Grafik özelliklerinin zorla güncellenmesi, olay işleme için hazırlık sağlar
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| MouseState                                                       |
//+------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // fare sol
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // fare sağ 
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // fare orta
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // fare ilk X tuşu
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // fare ikinci X tuşu
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // shift tuşu
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // control tuşu
   return(res);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_MOUSE_MOVE)
      Comment("POINT: ",(int)lparam,",",(int)dparam,"\n",MouseState((uint)sparam));
  }

CHARTEVENT_MOUSE_WHEEL olayı için, lparam ve dparam parametreleri, Ctrl ve Shift tuşlarının, fare tuşlarının, imleç koordinatlarının ve fare tekerleğinin kaydırma değerinin durumu hakkında bilgi içerir. Daha iyi anlamak için bu uzman danışmanı bir çizelgede çalıştırıp, kodda yazılan tuşlara basarak fare tekerleğini kullanın.

CHARTEVENT_MOUSE_WHEEL olayının işlenmesi örneği:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
init OnInit()
  {
//--- Fare tekerleğinin kaydırılmasıyla ilgili mesajlar
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- Grafik özelliklerinin zorla güncellenmesi, olay işleme için hazırlık sağlar
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_MOUSE_WHEEL)
     {
      //--- Bu olay için fare tuşlarının ve tekerleğinin durumunu izleyin
      int flg_keys = (int)(lparam>>32);          // Ctrl, Shift ve fare tuşlarının durumu
      int x_cursor = (int)(short)lparam;         // fare tekerleği olayının gerçekleştiği X koordinatı
      int y_cursor = (int)(short)(lparam>>16);   // fare tekerleği olayının gerçekleştiği Y koordinatı
      int delta    = (int)dparam;                // Fare tekerleği kaydırmasının toplam değeri, +120 veya -120 değerlerine ulaşıldığında tetiklenir
      //--- Bayrağın işlenmesi
      string str_keys="";
      if((flg_keys&0x0001)!=0) str_keys+="LMOUSE ";
      if((flg_keys&0x0002)!=0) str_keys+="RMOUSE ";
      if((flg_keys&0x0004)!=0) str_keys+="SHIFT ";
      if((flg_keys&0x0008)!=0) str_keys+="CTRL ";
      if((flg_keys&0x0010)!=0) str_keys+="MMOUSE ";
      if((flg_keys&0x0020)!=0) str_keys+="X1MOUSE ";
      if((flg_keys&0x0040)!=0) str_keys+="X2MOUSE ";
      
      if(str_keys!="")
         str_keys=", keys='"+StringSubstr(str_keys,0,StringLen(str_keys)-1) + "'";
      PrintFormat("%s: X=%d, Y=%d, delta=%d%s",EnumToString(CHARTEVENT_MOUSE_WHEEL),x_cursor,y_cursor,delta,str_keys);
     }
  }
//+------------------------------------------------------------------+ /*
   Çıktı örneği
   CHARTEVENT_MOUSE_WHEEL: Ctrl pressed: X=193, Y=445, delta=-120
   CHARTEVENT_MOUSE_WHEEL: Shift pressed: X=186, Y=446, delta=120
   CHARTEVENT_MOUSE_WHEEL:  X=178, Y=447, delta=-120
   CHARTEVENT_MOUSE_WHEEL:  X=231, Y=449, delta=120
   CHARTEVENT_MOUSE_WHEEL: MiddleButton pressed: X=231, Y=449, delta=120
   CHARTEVENT_MOUSE_WHEEL: LeftButton pressed: X=279, Y=320, delta=-120
   CHARTEVENT_MOUSE_WHEEL: RightButton pressed: X=253, Y=330, delta=120  */

Ayrıca Bakınız

Olay İşleme Fonksiyonları, Olaylarla çalışmak