Fehler, Irrtümer, Fragen - Seite 1063

 
MetaDriver:
Versuchen Sie ObjSetInteger(id, Name, OBJPROP_BACK, false);
Ich habe es ausprobiert. Das Formular fällt zwar nach hinten, aber auf die hässlichste Art und Weise, d.h. es fällt sogar hinter Gitterstäbe. Und die Aufgabe ist etwas anders, ich brauche nur den Text, der im Formular angezeigt wird, während das Formular selbst über Grafiken und anderen Formularen lag.
 
C-4:
Ich habe es ausprobiert. Das Formular fällt zwar nach hinten, aber auf die hässlichste Art und Weise, d.h. es fällt sogar hinter Gitterstäbe. Und die Aufgabe ist etwas anders, ich brauche nur den Text, der im Formular angezeigt wird, wobei das Formular selbst über der Grafik und anderen Formularen liegt.

Die Objekte werden in der Reihenfolge angezeigt, in der sie erstellt wurden. Wenn Sie die Reihenfolge ändern möchten, sollten Sie die Objektdaten speichern und sie in der richtigen Reihenfolge neu erstellen.

Oder ist der Fehler sogar darin zu finden?

 
C-4:
Ich habe es ausprobiert. Das Formular fällt zwar nach hinten, aber auf die hässlichste Art und Weise, d.h. es fällt sogar hinter Gitterstäbe. Und die Aufgabe ist etwas anders, Sie brauchen nur den Text, der im Formular angezeigt werden soll, wobei das Formular selbst über der Grafik und anderen Formularen liegt.
Sie müssen nur die Reihenfolge beachten , in der die Grafikobjekte erstellt werden. Diejenigen, die darunter liegen, sollten zuerst erstellt werden.
 
tol64:
Sie müssen nur die Reihenfolge berücksichtigen, in der die grafischen Objekte erstellt werden. Diejenigen, die darunter liegen sollten, sollten zuerst erstellt werden.

Ja, das war das Erste, woran ich gedacht habe. Ich habe die Reihenfolge geändert - gleiches Ergebnis. Aber es gibt keine Wunder. Aber jetzt habe ich ein funktionierendes Projekt genommen und versucht, OBJ_EDIT dort zu platzieren, und es hat gut funktioniert, d.h. es ist über dem Formular sichtbar. Alles in allem sieht es also wie die Hölle aus. Offensichtlich habe ich etwas vergessen oder nicht bedacht. Aber ich wollte es trotzdem in Ordnung bringen, damit ich beim nächsten Mal nicht den gleichen Fehler mache. Hier ist der Code von OnInit() für den Test:

//+------------------------------------------------------------------+
//| 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:

Ja, das war das erste, woran ich gedacht habe. Ich habe die Reihenfolge geändert - gleiches Ergebnis. Aber es gibt keine Wunder. Aber jetzt habe ich ein funktionierendes Projekt genommen und versucht, OBJ_EDIT dort zu platzieren, und es hat gut funktioniert, d.h. es ist über dem Formular sichtbar. Alles in allem sieht es also wie die Hölle aus. Offensichtlich habe ich etwas vergessen oder nicht bedacht. Aber ich möchte es trotzdem herausfinden, damit ich diesen Fehler beim nächsten Mal nicht mache. Hier ist der Code von OnInit() für den Test:

In diesem Fall brauchen wir ein Objekt-Handler, so dass das Konto von dem, was erstellt wird und in welcher Reihenfolge war an einem Ort, dann wird es keine Überschneidungen, wenn eine Funktion erstellt diese zweite dies, und die Änderung der Funktion aufrufen wird die Reihenfolge ändern.

Es ist schwer, diese Art von Fehler zu erkennen und sogar vorherzusehen.

 
Info für MQ. Im Handbuch für OnTimer steht "... zu empfangen durch EventSetTimer()...". Sie sollten auch "... oder EventSetMillisecondTimer()..." hinzufügen.
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 

Hallo zusammen!

In der Hilfe gibt es einen Absatz wie diesen:

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

Wenn sich also ein ChartEvent in der Ereigniswarteschlange befindet, sollte es nicht ein zweites Mal in die Warteschlange gestellt werden. Ich hatte ein Problem mit ihm :)

Ich habe einen Expert Advisor gezeichnet, um das zu überprüfen. Es stellte sich heraus, dass unabhängig davon, ob ein ChartEvent-Ereignis in der Warteschlange vorhanden ist oder nicht, der ChartEvent-Handler so oft aufgerufen wird, wie ich ihn generiere.

Das ist großartig, aber meiner Meinung nach muss ich die Hilfe korrigieren... Oder liege ich falsch?

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:

Hallo zusammen!

In der Hilfe gibt es einen Absatz wie diesen:

Wenn sich also ein ChartEvent in der Ereigniswarteschlange befindet, sollte es nicht ein zweites Mal in die Warteschlange gestellt werden. Ich hatte ein Problem mit ihm :)

Ich habe einen Expert Advisor gezeichnet, um das zu überprüfen. Es stellte sich heraus, dass unabhängig davon, ob ein ChartEvent-Ereignis in der Warteschlange vorhanden ist oder nicht, der ChartEvent-Handler so oft aufgerufen wird, wie ich ihn generiere.

Das ist großartig, aber ich glaube, wir müssen die Hilfe korrigieren... Oder liege ich da falsch?

Dies gilt nur für den Fall, dass die Warteschlange überläuft. Wenn die Warteschlange voll ist, wird der Ereignistyp, der sich bereits in der Warteschlange befindet, nicht platziert.

Wenn die Warteschlange nicht voll ist (und die Länge der Warteschlange 1024 beträgt), werden alle Ereignisse bearbeitet.

 
Urain:

Dies gilt nur, wenn die Warteschlange voll ist. Wenn die Warteschlange voll ist, wird ein Ereignis eines Typs, der sich bereits in der Warteschlange befindet, nicht in die Warteschlange aufgenommen.

Wenn die Warteschlange jedoch nicht überläuft (und die Länge der Warteschlange beträgt meiner Meinung nach 1024), werden alle Ereignisse verarbeitet.

Ich hab's. Vielen Dank :)

PS: Der obige Expert Advisor konnte nicht mehr als 1000 in die Warteschlange stellen.

 
paladin800:
Info für MQ. Im Handbuch für OnTimer steht "... zu empfangen durch EventSetTimer()...". Sie sollten auch "... oder EventSetMillisecondTimer()..." hinzufügen.
Dann wird jeder den Millisekunden-Timer einstellen, auch wenn er ihn nicht braucht...