Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Sanırım öyle.
Biraz farklı tho.
Küresel ve statik ne burada ne de oradadır. Ancak sıfırlama yönteminiz iyi. Aşırıya kaçmayı engeller.
Çok erken konuştum. Seninki diğer yolu aşıyor. Daha sonraki bir CTRL tuşuna basıldığında tetiklenir. Grafiğe tıklarsanız, CTRL'ye basın, patlar.
@honest_knave - yorumunuz için teşekkürler. Bunu çok takdir ediyorum - ama ilk @Marco vd Heijden yorumunu denemeye başladım. (Bu konudaki tüm yorumlarınızı okudum.)
@Marco vd Heijden - Teşekkürler dostum.
Ama sanırım yanlış bir şey yapıyorum, belki daha net anlamıyorum. Neyse denedim, kodun altında bulabilirsiniz.
Hatam nerede lütfen?
//| keydown.mq4 |
//| Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
string prefix = "Custom Expert |" ;
string lotedit = prefix + "Edit Name" ;
string lotbtnplus = prefix + "Lot button Plus" ;
string lotbtnminus = prefix + "Lot button Minus" ;
double lot = 0.01 , lotstep = 0.01 ;
bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- create timer
EventSetTimer ( 60 );
graphicsObj();
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
{
//--- destroy timer
EventKillTimer ();
ObjectsDeleteAll ( 0 , prefix );
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick ()
{
//---
graphicsObj();
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer ()
{
//---
}
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
if ( id == CHARTEVENT_CLICK )
{
if ( sparam == lotbtnplus )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
lot = lot + lotstep;
update();
Print ( " | lot plus : " , lot );
return ;
}
Print ( "Click" );
ctrl_click = 1 ;
}
if ( id == CHARTEVENT_KEYDOWN )
{
//Print(lparam);// print to identify keycode
if ( lparam == 17 ) // ctrl key
{
if ( ctrl_click == 1 ) // if mouse click
{
//Do Something when CTRL (keycode 17) is pressed
if ( sparam == lotbtnplus )
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
lot = lot + ( lotstep * 10 );
Print ( " | lot plus + Ctrl initial: " , lot );
update();
Print ( " | lot plus + Ctrl: " , lot );
return ;
}
Print ( "Ctrl + Click" );
ctrl_click = 0 ; // reset
}
}
ctrl_click = 0 ; // reset if not ctrl
}
}
//|+--------------------------------------------------------------------------------+
//| - Function Update |
//|+--------------------------------------------------------------------------------+
void update()
{
//---
ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 ) );
//---
return ;
}
{
ObjectCreate ( 0 , lotedit, OBJ_EDIT , 0 , 0 , 0 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_XDISTANCE , 30 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_YDISTANCE , 30 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_XSIZE , 60 );
ObjectSetInteger ( 0 , lotedit, OBJPROP_YSIZE , 30 );
ObjectSetString ( 0 , lotedit, OBJPROP_TEXT , DoubleToString ( lot, 2 ));
ObjectCreate ( 0 , lotbtnplus, OBJ_BUTTON , 0 , 0 , 0 );
ObjectSetString ( 0 , lotbtnplus, OBJPROP_TEXT , "+" );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XDISTANCE , 100 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YDISTANCE , 30 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_XSIZE , 70 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_YSIZE , 30 );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_BACK , false );
ObjectSetInteger ( 0 , lotbtnplus, OBJPROP_SELECTABLE , false );
}
İlk probleminiz, CHARTEVENT_CLICK'in CHARTEVENT_OBJECT_CLICK ile aynı olmamasıdır. Grafikteki herhangi bir tıklamayı değil, bir nesnedeki tıklamaları yakalamak istiyorsunuz.
const long &lparam,
const double &dparam,
const string &sparam)
{
// if( id == CHARTEVENT_CLICK )
if ( id == CHARTEVENT_OBJECT_CLICK )
const long &lparam,
const double &dparam,
const string &sparam)
{
static bool wasCTRL= false ;
if (id== CHARTEVENT_OBJECT_CLICK && sparam == lotbtnplus)
{
ObjectSetInteger ( 0 , sparam, OBJPROP_STATE , false );
lot+=(wasCTRL)?lotstep* 10 :lotstep;
update();
Print ( " | lot plus : " , lot );
return ;
}
wasCTRL=(id== CHARTEVENT_KEYDOWN && lparam== 17 );
}
Bu yardımcı olabilir. CTRL'den sonra düğmeye ne kadar hızlı bastığınıza bağlı olarak, farenin ikinci tıklamasında yalnızca 0,1'e gittiğini görebilirsiniz.
#Ctrl + Fare Düğmesi - Kapalı
Vay canına, tıpkı bunun gibi, inanılmaz büyük teşekkürler dürüst!
@honest_knave ve @Marco vd Heijden'e özel teşekkürler
( MT4 platformu iki kez güncellendi. ) Bu güncellemelerden sonra bu elektronik tablo grafikte güncellenmiyor, hesap tablosu ile ilgili her şeyi kontrol ettim herhangi bir sorun görmüyorum.
E-tablonun üzerinde Alış ve Satış fiyatlarını da kullandığımı bildirmem gerekiyor, Bid ve Ask iyi çalışıyor, ancak e-tablo çalışmıyor.
Endişemi anlıyorsanız, bu sorunu nasıl çözebileceğimi bana bildirin.
Şimdiden teşekkürler.
Elektronik tablo hakkında bir kodunuz var mı?
E-tablo hakkında bir kodunuz var mı?
2 farklı Etiket Fonksiyonu yazabilir miyim?
(Örn: metin için 1, metin ve yazı tipi boyutu için 2.)