Yeni MQL4 sözdizimi - sayfa 6

 
SDC :

Terminal_data_directory'deki simgenin yolunu koyduğumda derleyici hataları, sanal mağazada bir klasör belirtmememe rağmen hata sanal mağaza klasöründe dosya açılamıyor diyor. terminal_data_dizininde bir klasör belirtiyorum.

Çalıştırabilmemin tek yolu, dosyayı kaynak kodla aynı klasöre koymak ve hiçbir yol belirtmemekti, sadece #property simgesi "MyIcon.ico"


Merhaba, herhangi birinin #property simgesi "\\Images\\MyIcon.ico" ile ilgili bir sorunu olması durumunda, simgenin boyutunu 96x96 piksel veya daha yüksek olarak düşünmelisiniz. Ben de hatayı yaşadım, ancak şimdi çalışıyor.
 

Derleyicinin gerçekleşmesini beklemediğim bir döküm gerçekleştirdiğini fark ettim.

Aşağıdaki kodum var:

burada anahtar nesnenin sınıfı MT4String iken, getKey() işlevi daha genel bir sınıf döndürür. Aynı durum button nesnesi için de geçerlidir. Açık döküm atlanmıştır.

Orijinal kod şöyle görünüyordu:

JAVA'da açık döküm gerekli olacaktır, ancak MQL4 derleyicisi bu sözdizimi ile de düzgün şekilde çalışır.

Bu örtük olarak C++'da da geçerli olan bir özellik yayınlamak mı? Yoksa bu bir bug mı?

 

Ben bir C++ uzmanı değilim ama bir temel sınıftan bir alt sınıfa geçişe downcasting denir ve bu sayfaya göre downcasting C++'da da açık olmalı gibi görünüyor. (Java gibi) ?

MQL4, örtük aşağı yayına izin verdiğinden, bu ya bir "özellik" ya da bir hatadır :)

Bu bir "özellik" ise, muhtemelen derleyicinin kodlayıcıyı olası bir hata konusunda uyarmada başarısız olacağı anlamına gelir, bu nedenle harika bir özellik değildir. Hem C++ hem de Java bir nedenden dolayı açık bir şekilde aşağı yayın gerektiriyor mu?

Ayrıca, MQL4'te bir nesnenin sınıfını (örn. instanceOf vb.) kontrol etmek için yerleşik bir yol yoktur, bu nedenle kendi 'tür' kontrolünüzü uygulamadıkça bir çalışma zamanı hatasından kaçınılamayacağı anlamına gelir...


Animal a;

Dog d;

...

if (a instanceOf Dog) { // no built in check like this - we all have to roll our own??

 d = a;

}
 
ydrol :

Ben bir C++ uzmanı değilim ama bir temel sınıftan bir alt sınıfa geçişe downcasting denir ve bu sayfaya göre downcasting C++'da da açık olmalı gibi görünüyor. (Java gibi) ?

MQL4, örtük aşağı yayına izin verdiğinden, bu ya bir "özellik" ya da bir hatadır :)

Bu bir "özellik" ise, muhtemelen derleyicinin kodlayıcıyı olası bir hata konusunda uyarmada başarısız olacağı anlamına gelir, bu nedenle harika bir özellik değildir. Hem C++ hem de Java bir nedenden dolayı açık bir şekilde aşağı yayın gerektiriyor mu?

Ayrıca, MQL4'te bir nesnenin sınıfını (örn. instanceOf vb.) kontrol etmek için yerleşik bir yol yoktur, bu nedenle kendi 'tür' kontrolünüzü uygulamadıkça bir çalışma zamanı hatasından kaçınılamayacağı anlamına gelir...




Evet, instanceof veya ".class" için de minnettar olurum, ancak fark ettiğim kadarıyla C++'da bile mevcut değil. MQL4 hata ayıklayıcısı bile izlenen nesnenin türünü bilmiyor. Çok da umurumda değil, çünkü MQL4'teki OOP özelliği şaşırtıcı bir şekilde çok iyi uygulanmış ve eğer tek hata bu olsaydı, o zaman yaşasın derdim. Sadece mevcut bir kalıbı takip edip etmediğini merak ettim, ama görünüşe göre bu bir hataydı.

 

tek tıkla ticaret

eski MT4'te EA tek tıklama ticareti oluşturmak için bir dll dosyası kullanıyorum

parametreyi yazabilirim .. LOT, TP SL doğrudan bu beyaz metin kutusuna

al veya sat'a tıkladığımda.. EA'm kutudaki giriş metnini okuyor.

yeni MT4'te düğme işlevini görüyorum .. ancak böyle bir metin kutusu okuma oluşturma işlevini bulamıyorum

 
WDholic :

eski MT4'te EA tek tıklama ticareti oluşturmak için bir dll dosyası kullanıyorum

parametreyi yazabilirim .. LOT, TP SL doğrudan bu beyaz metin kutusuna

al veya sat'a tıkladığımda.. EA'm kutudaki giriş metnini okuyor.

yeni MT4'te düğme işlevini görüyorum .. ancak böyle bir metin kutusu okuma işlevini bulamıyorum

Klavye girişi için OBJ_EDIT nesne tipi vardır. Enter tuşuna basarsanız CHARTEVENT_OBJECT_ENDEDIT olayını tetikler. Ancak düzenlemeyi bitirmenin tek yolu Enter tuşu gibi görünüyor, örneğin nesne sınırlarının dışında bir fareye tıklamak düzenlemeyi bitirmez. Nesneyi kullanıcı dostu olmayan olarak dağıtmamı engelliyor.

Ayrıca, ilk değer olarak boş dize verilirse, bunun yerine otomatik "Düzenle" metni görünür (ve bu kelime düzenlenebilir), bu gerçekten kafa karıştırıcıdır.

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

   if (id== CHARTEVENT_OBJECT_ENDEDIT ){
   
       if (sparam== "pulsanteEdit" ) Print ( "The text in the Edit field of the object with name " ,sparam, " has been changed" );
     } 
}
void creaPulsanteEdit( const string objNameIns, const string objText, int xDistance, int yDistance, int xSize, int ySize, color clrIns, color clrTextIns){
   
   if (! ObjectCreate ( 0 ,objNameIns, OBJ_EDIT , 0 , 0 , 0 )){ 
      stampaErrore( "Errore creazione pulsante edit" );
       return ;
   }
   
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_CORNER , CORNER_LEFT_UPPER );
   
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_XDISTANCE ,xDistance); 
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_YDISTANCE ,yDistance); 

   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_XSIZE ,xSize); 
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_YSIZE ,ySize);
   
//--- set the text 
   ObjectSetString ( 0 ,objNameIns, OBJPROP_TEXT ,objText);
   ObjectSetString ( 0 ,objNameIns, OBJPROP_FONT , "Arial" );
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_FONTSIZE , 10 );
   
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_READONLY , false );
   
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_BGCOLOR ,clrIns);
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_COLOR ,clrTextIns);
   
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_BORDER_COLOR ,LightSeaGreen);
   
//--- display in the foreground (false) or background (true) 
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_BACK , false );
   
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_SELECTABLE , false );
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_SELECTED , false );
   ObjectSetInteger ( 0 ,objNameIns, OBJPROP_HIDDEN , false );
}

void OnTick (){

  creaPulsanteEdit( "pulsanteEdit" , string1, 10 , 275 , 60 , 30 ,Black,LightSeaGreen);

   Print ( "string1: " +string1);
}

Bu düğmeyi içindeki metni düzenlemek için oluşturdum ve metin dizesini okumak ve bir double veya int değişkenine dönüştürmek istiyorum ancak çalışmıyor ve "Ad ile nesnenin Düzenleme alanındaki metin" yazmıyor . değiştirildi"

Bana yardımcı olabilir misiniz?

Neden: