uzman danışman - çeşitli sorular - sayfa 12

 
Marco vd Heijden :

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.
 
honest_knave :
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 ;
}
void graphicsObj()
{
     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.

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
{

//    if( id == CHARTEVENT_CLICK )
     if ( id == CHARTEVENT_OBJECT_CLICK )
 
void OnChartEvent ( const int id,
                   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.
 
honest_knave :
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

 
#SpreadSheet - Aç

En son Cuma günü ' Elektronik Tablo ' OnTick işlevi tarafından yapılan güncellemelerdi (hangisi ihtiyacım var, benim için iyi oldu).

( 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.

Bu yüzden Etiket Nesneleri için Etiket İşlevini kullanıyorum - her Etiket nesnesi 'Elektronik Tablo' olmadan iyi çalışıyor. Ayrıca işlevsiz elektronik tablo için Label nesnesi oluşturduğumda da bilgi vermem gerekiyor, iyi çalışıyor.
Bu sorun MT4 Platformu yükseltmelerinden sonra başlıyor, bu sorunun nereden geldiğinden emin değilim.

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ı?

 
Marco vd Heijden :

E-tablo hakkında bir kodunuz var mı?

Hala bunun hakkında araştırma yapıyorum, ayrıca yakında çalışan ve çalışmayan bazı kodlarını yayınlayacağım.
 

2 farklı Etiket Fonksiyonu yazabilir miyim?
(Örn: metin için 1, metin ve yazı tipi boyutu için 2.)