MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 251

 

Merhaba. Bir danışman için mql4 ve mql5 olmak üzere iki versiyonda bir ticaret paneli yazmak istiyorum. Henüz grafik nesnelere pek aşina değilim; hareketli bir menü oluşturmak için standart kitaplığın CLabel sınıfından bir örnek kullandım. mql5'te menü harika çalışıyor ancak mql4'te çalışmıyor. Grafik periyodunu değiştirirken, menü nesneleri çoğaltılır, birbirlerine göre konumları değişir. Muhtemelen CLabel sınıfındaki mql4, mql5'teki bazı yöntemlerden yoksundur? Bu tür sorunların ortaya çıkmaması için bu sınıfa ek olarak nelerin kaydedilmesi gerektiğini söyler misiniz?

Ayrıca, CLabel sınıfı için örnek kodda, bu satırların ne yaptığı bana açık değil:

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz :

Merhaba. Bir danışman için mql4 ve mql5 olmak üzere iki versiyonda bir ticaret paneli yazmak istiyorum. Henüz grafik nesnelere aşina değilim; hareketli bir menü oluşturmak için standart kitaplığın CLabel sınıfından bir örnek kullandım. mql5'te menü harika çalışıyor ancak mql4'te çalışmıyor. Grafik periyodunu değiştirirken, menü nesneleri çoğaltılır, birbirlerine göre konumları değişir. Muhtemelen CLabel sınıfındaki mql4, mql5'teki bazı yöntemlerden yoksundur? Bu tür sorunların ortaya çıkmaması için bu sınıfa ek olarak nelerin kaydedilmesi gerektiğini söyler misiniz?

Ayrıca, CLabel sınıfı için örnek kodda, bu satırların ne yaptığı bana açık değil:


Belirtilen satırlar, Defines.mqh dosyasına yazılan makrolardır. Eğer kelimesi kelimesine, makronun ilk satırı kontrolü CControlsDialog sınıfının olay işleme fonksiyonuna aktarır, daha sonra bu makrolar arasında yazılan fonksiyonlar yürütülür, son makro ise kontrolü CAppDialog sınıfına aktarır.

 
Алексей Барбашин :

Belirtilen satırlar, Defines.mqh dosyasına yazılan makrolardır. Eğer kelimesi kelimesine, makronun ilk satırı kontrolü CControlsDialog sınıfının olay işleme fonksiyonuna aktarır, daha sonra bu makrolar arasında yazılan fonksiyonlar yürütülür, son makro ise kontrolü CAppDialog sınıfına aktarır.


Teşekkürler, bir şeyler netleşmeye başladı) Makrolar konusundaki belgelere bir bağlantı verebilir misiniz?

 
Aleksandr Teleguz :

Teşekkürler, bir şeyler netleşmeye başladı) Makrolar konusundaki belgelere bir bağlantı verebilir misiniz?


https://www.mql5.com/ru/docs/basis/preprosessor/constant

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Основы языка / Препроцессор / Макроподстановка (#define) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

int OnDeinit()

{

Uyarı ("OnDeinit()'e yalvarın");

// err=StringToInteger(err);

//---------------------------

dönüş(0);

Alert("OnDeinit()'i sonlandır");

}

//OnDeinit();-----------

err değişkeni tamsayı olarak bildirildi


sorunun ne olduğu belli değil

bir mesajım var

 
buyanov :

int OnDeinit()

{

Alert("OnDeinit()'e yalvarın");

// err=StringToInteger(err);

//---------------------------

dönüş(0);

Alert("OnDeinit()'i sonlandır");

}

//OnDeinit();-----------

err değişkeni tamsayı olarak bildirildi


sorunun ne olduğu belli değil

bir mesajım var


Sorunun ne olduğu ve nerede hata verdiği belli değil. int türünde bir err değişkeniniz varsa, neden yorum satırında onu dize türünden int türüne dönüştürmeye çalışıyorsunuz? Hata tam olarak nerede oluşuyor?

 
Алексей Барбашин :

Sorunun ne olduğu ve nerede hata verdiği belli değil. int türünde bir err değişkeniniz varsa, neden yorum satırında onu dize türünden int türüne dönüştürmeye çalışıyorsunuz? Hata tam olarak nerede oluşuyor?

İşin aslı şu ki bir hata görmüyorum ama uyarı örtük bir tamsayıyı string'e çeviriyor.Buna inanmak zor olsa da hatanın derleyicide olduğundan şüpheleniyorum. Her durumda, bunu çözmeniz gerekir.
 
buyanov : err değişkeni tamsayı olarak bildirildi Sorunun ne olduğu belli değil Mesaj alındı

Derleyici mesajı, hatanın satırını ve konumunu belirtir. Açıklama satırına (şekildeki alt satır) tıklayabilirsiniz ve imleç program metninde hatayı gösterecektir. DeInit işlevi, gösterge veya Uzman Danışman grafikten kaldırılmadan hemen önce yürütülür. Burada, örneğin, oluşturulan grafik öğeleri silinebilir. Gerçekleştirilecek herhangi bir işlem yoksa (fonksiyon boşsa), fonksiyon silinebilir... Eğer string x=125 gibi bir şeyiniz varsa, onu string x = (string)125 olarak düzeltin

err=StringToInteger(err) yerine; err=StringToInteger((string)err); bazı insanlar bunu komik bulsa bile

 
STARIJ :

Derleyici mesajı, hatanın satırını ve konumunu belirtir. Açıklama satırına (şekildeki alt satır) tıklayabilirsiniz ve imleç program metninde hatayı gösterecektir. DeInit işlevi, gösterge veya Uzman Danışman grafikten kaldırılmadan hemen önce yürütülür. Burada, örneğin, oluşturulan grafik öğeleri silinebilir. Gerçekleştirilecek herhangi bir işlem yoksa (fonksiyon boşsa), fonksiyon silinebilir... Eğer string x=125 gibi bir şeyiniz varsa, onu string x = (string)125 olarak düzeltin

err=StringToInteger(err) yerine; err=StringToInteger((string)err); bazı insanlar bunu komik bulsa bile


Hmm...

önerdiğin gibi yaptın

err=StringToInteger((string)err); satırını Ondeinit işlevine koyun, hata vermiyor.

ancak dizeden sayıya uyarı örtülü konvsiyon hala devam ediyor, görünüşe göre terminalin yine de yeniden kurulması gerekecek.

 
buyanov : tavsiye ettiğiniz gibi, err=StringToInteger((string)err); satırını Ondeinit işlevine koydunuz, hata vermiyor.

ancak dizeden sayıya uyarı örtülü konvsiyon hala devam ediyor, görünüşe göre terminalin yine de yeniden kurulması gerekecek.

OnDeinit işlevinizi gönderin, bir bakayım. Ve ondan ne istediğini bana bildir. Hata MetaEditor tarafından atılır. Terminal klasörünün bir kopyasına sahip olun. Burada Alexey Viktorov nasıl hızlı bir şekilde yeniden kurulacağını söyledi