Ç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
|
|
|
CHARTEVENT_KEYUP
|
Bir tuşun serbest bırakılması
|
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ı
|
CHARTEVENT_KEYUP olayı
CHARTEVENT_KEYUP olayı, grafik penceresi giriş odağına sahipken kullanıcı bir tuşu bıraktığında gerçekleşir. Bu olay, bir tuşa basıldığında oluşturulan mevcut CHARTEVENT_KEYDOWN olayını tamamlar. Her iki olayı da kullanmak, tuşlara ne zaman basıldığını ve bırakıldığını doğru bir şekilde belirlememizi sağlar; bu da etkileşimli kontrollere sahip kullanıcı arayüzleri ve araçlar oluştururken kullanışlıdır.
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(id == CHARTEVENT_KEYUP)
{
int key = (int)lparam;
::Print("Key released: ", TranslateKey(key));
}
}
|
lparam, CHARTEVENT_KEYDOWN olayına benzer tuş kodu içerir. Bir tuşun metin gösterimini almak için TranslateKey() fonksiyonunu kullanın.
Ölü tuşların işlenmesi
"Ölü tuşlar" olarak adlandırılan tuşların işlenmesi desteklenmektedir. Bunlar hemen bir karakter girmeyen, ancak girilen bir sonraki karakterin görünümünü değiştiren tuşlardır. Örneğin, Yunanca yazım düzeninde ; tuşu sesli harflere vurgu yapmak için kullanılır (ά, έ, ύ vb.).
Artık bu tür tuşlar CHARTEVENT_KEYDOWN ve CHARTEVENT_KEYUP işleyicilerindeki TranslateKey() fonksiyonu kullanılarak izlenebilir. Bu, farklı dillerdeki yazım düzenlerinde karmaşık tuş kombinasyonlarına basma ve bırakmanın doğru şekilde algılanmasını sağlar.
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if(id == CHARTEVENT_KEYDOWN)
{
int key = (int)lparam;
string text = TranslateKey(key);
::Print("Pressed: ", text);
}
if(id == CHARTEVENT_KEYUP)
{
int key = (int)lparam;
string text = TranslateKey(key);
::Print("Released: ", text);
}
}
|
Ölü tuşların işlenmesi, özel metin alanları, kısayol tuşu sistemleri ve uluslararası klavye düzenlerine yanıt veren arayüzler uygularken kullanışlıdır.
OnChartEvent fonksiyon girdileri
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ş serbest bırakma olayı
|
CHARTEVENT_KEYUP
|
Serbest bırakılan tuş kodu
|
Olay tekrarı sayısı her zaman 1'dir
|
Değiştirici tuşların durumunu açıklayan bir bit maskesi dizge değeri. Bakınız: WM_KEYUP message
|
Tuşa basma olayı
|
CHARTEVENT_KEYDOWN
|
Basılan tuş kodu
|
Bir tuş basılı kaldığı sürece olay tekrarı sayısı
|
Değiştirici tuşların durumunu açıklayan bir bit maskesi dizge değeri. Bakınız: WM_KEYDOWN message
|
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:
|
|
|
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