Hatalar, hatalar, sorular - sayfa 1063

 
MetaDriver :
ObjSetInteger(id, Name, OBJPROP_BACK, yanlış );
Sınanmış. Form gerçekten de geriye düşüyor, ancak bunu en çirkin şekilde yapıyor, yani. parmaklıkların arkasında bile başarısız oluyor. Ve görev biraz farklıdır, formun kendisi grafiğin ve diğer formların üstündeyken, formda görüntülenecek metne ihtiyacınız vardır.
 
C-4 :
Sınanmış. Form gerçekten de geriye düşüyor, ancak bunu en çirkin şekilde yapıyor, yani. parmaklıkların arkasında bile başarısız oluyor. Ve görev biraz farklıdır, formun kendisi grafiğin ve diğer formların üstündeyken, formda görüntülenecek metne ihtiyacınız vardır.

Nesneler oluşturulma sırasına göre görüntülenir, sırayı değiştirmeniz gerekirse, nesnelerin verilerini kaydetmeli ve istediğiniz sırayla yeniden oluşturmalısınız.

Yoksa bu bile bir bug mı?

 
C-4 :
Sınanmış. Form gerçekten de geriye düşüyor, ancak bunu en çirkin şekilde yapıyor, yani. parmaklıkların arkasında bile başarısız olur. Ve görev biraz farklıdır, formun kendisi grafiğin ve diğer formların üstündeyken, formda görüntülenecek metne ihtiyacınız vardır.
Grafik nesnelerinin oluşturulma sırasını dikkate almanız yeterlidir. Daha düşük olması gerekenlerin önce yaratılması gerekir.
 
tol64 :
Grafik nesnelerinin oluşturulma sırasını dikkate almanız yeterlidir. Daha düşük olması gerekenlerin önce yaratılması gerekir.

Evet, ilk aklıma gelen buydu. Sıra değişti - aynı sonuç. Ama mucizeler olmaz. Şimdi bir çalışma taslağı alıp içine OBJ_EDIT yerleştirmeye çalışmama rağmen - iyi çalıştı, yani formun üzerinde görülebilir. Genel olarak, bir tür cehennem. Bir şeyi hesaba katmadığım ya da unuttuğum açık. Ama yine de bir dahaki sefere bu tırmığa basmamak için çözmek istiyorum. İşte test için OnInit() kodu:

 //+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   
   ObjectCreate ( 0 , "cell" , OBJ_RECTANGLE_LABEL , 0 , 0 , 0 );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_XDISTANCE , 15 );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_YDISTANCE , 60 );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BGCOLOR , clrWhite );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BORDER_TYPE , BORDER_FLAT );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BORDER_COLOR , clrBlack );
   ObjectSetInteger ( 0 , "cell" , OBJPROP_BACK , false );
   //ObjectSetInteger(0, "cell", OBJPROP_SELECTED, false);
   
   ObjectCreate ( 0 , "edittext" , OBJ_EDIT , 0 , 30 , 30 );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_XDISTANCE , 40 );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_YDISTANCE , 50 );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_BGCOLOR , clrNONE );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_BORDER_COLOR , clrNONE );
   //ObjectSetInteger(0, "edittext", OBJPROP_WIDTH, 3);
   ObjectSetString ( 0 , "edittext" , OBJPROP_TEXT , "edit text" );
   ObjectSetInteger ( 0 , "edittext" , OBJPROP_BACK , false );
   
   
   EventSetTimer ( 1 );
//---
   return ( INIT_SUCCEEDED );
  }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов - Документация по MQL5
 
C-4 :

Evet, ilk aklıma gelen buydu. Sıra değişti - aynı sonuç. Ama mucizeler olmaz. Şimdi bir çalışma taslağı alıp içine OBJ_EDIT yerleştirmeye çalışmama rağmen - iyi çalıştı, yani formun üzerinde görülebilir. Genel olarak, bir tür cehennem. Bir şeyi hesaba katmadığım ya da unuttuğum açık. Ama yine de, bir dahaki sefere bu tırmığa basmamak için çözmek istiyorum. İşte test için OnInit() kodu:

Bu durumda, bir nesne işleyicisine ihtiyaç duyulur, böylece neyin yaratıldığı ve hangi sırada olduğu hesabı tek bir yerde, o zaman bir işlevin bu ikinciyi oluşturduğuna dair hiçbir bindirme olmaz ve işlev çağrısının değiştirilmesi sırayı değiştirir.

böyle bir hatayı yakalamak ve hatta öngörmek zordur.

 
MQ için bilgi. OnTimer için başvuruda "... EventSetTimer() işlevi tarafından alınacak ..." vardır. Ayrıca "... veya EventSetMillisecondTimer()..." eklemelisiniz.
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 

Herkese merhaba!

Yardımın şu paragrafı var:

Все события обрабатываются одно за другим в порядке поступления. Если в очереди уже есть событие NewTick либо это событие находится в состоянии обработки, то новое событие NewTick в очередь mql5-программы не ставится. Аналогично, если в очереди mql5-программы уже находится событие ChartEvent или такое событие обрабатывается, то новое событие такого типа не ставится в очередь .

Onlar. olay kuyruğunda bir ChartEvent varsa, ikinci kez kuyruğa eklenmemelidir. orada yoktu :)

Doğrulama için bir uzman çizdim ... Kuyrukta bir olay olup olmadığına bakılmaksızın ortaya çıktı.   ChartEvent veya değil, ChartEvent olay işleyicisi ürettiğim kadar çok kez aradım.

Bu harika, ama sanırım yardımı düzenlemeniz gerekiyor ... Yoksa yanılıyor muyum?

 input int N= 50 ; //количество событий в очереди

void OnInit ()
  {
   EventSetTimer ( 5 );
  }

void OnDeinit ( const int reason)
  {
   EventKillTimer ();    
  }

void OnTimer ()
  {
   for ( ushort i= 0 ; i<N; i++) EventChartCustom ( 0 , 1 ,i, 0 ,( string ) 0 );
  }


void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
   if (id> CHARTEVENT_CUSTOM ) Print ( "Обработано событие номер: " , lparam);
  }
 
MigVRN :

Herkese merhaba!

Yardımın şu paragrafı var:

Onlar. olay kuyruğunda bir ChartEvent varsa, ikinci kez kuyruğa eklenmemelidir. orada yoktu :)

Doğrulama için bir uzman çizdim ... Kuyrukta bir olay olup olmadığına bakılmaksızın ortaya çıktı.   ChartEvent veya değil, ChartEvent olay işleyicisi ürettiğim kadar çok kez aradım.

Bu harika, ama sanırım yardımı düzenlemeniz gerekiyor ... Yoksa yanılıyor muyum?

Bu, yalnızca kuyruk taşması durumunda geçerlidir, sıra doluysa, olay türü zaten kuyruğa alınmaz.

sıra dolu değilse (ve sıranın uzunluğu önceden 1024 ise), tüm olaylar işlenir.

 
Urain :

Bu, yalnızca kuyruk taşması durumunda geçerlidir, sıra doluysa, olay türü zaten kuyruğa alınmaz.

sıra dolu değilse (ve sıra uzunluğu önceden 1024 ise), tüm olaylar işlenir.

Anladım. Teşekkürler :)

Not: Yukarıdaki Expert Advisor'da 1000'den fazlası sıraya alınmadı.

 
paladin800 :
MQ için bilgi. OnTimer kılavuzunda "... EventSetTimer() işlevi tarafından alınacak ..." vardır. Ayrıca "... veya EventSetMillisecondTimer()..." eklemelisiniz.
O zaman herkes bir milisaniye zamanlayıcı ayarlayacaktır, bu gerekli olmasa bile ...