Errores, fallos, preguntas - página 1063

 
MetaDriver:
Prueba con ObjSetInteger(id, Name, OBJPROP_BACK, false);
Lo probé. La forma sí cae hacia atrás, pero lo hace de la manera más fea posible, es decir, incluso cae detrás de las rejas. Y la tarea es algo diferente, sólo necesito que el texto se muestre en el formulario, mientras que el propio formulario estaba encima de los gráficos y otras formas.
 
C-4:
Lo he probado. La forma sí cae hacia atrás, pero lo hace de la manera más fea posible, es decir, incluso cae detrás de las rejas. Y la tarea es algo diferente, sólo necesito que el texto se muestre en el formulario, estando el propio formulario encima del gráfico y otros formularios.

Los objetos se muestran en el orden en que fueron creados, si desea cambiar el orden, debe guardar los datos del objeto y volver a crearlos en el orden correcto.

¿O es que el error está en esto?

 
C-4:
Lo probé. La forma sí cae hacia atrás, pero lo hace de la manera más fea posible, es decir, incluso cae detrás de las rejas. Y la tarea es algo diferente, sólo necesitas que el texto se muestre en el formulario, con el propio formulario encima del gráfico y otras formas.
Sólo hay que tener en cuenta el orden de creación de los objetos gráficos. Los que deben estar abajo deben ser creados primero.
 
tol64:
Sólo hay que tener en cuenta el orden de creación de los objetos gráficos. Los que deben ser más bajos deben ser creados primero.

Sí, es lo primero que pensé. Cambiado el orden - mismo resultado. Pero no hay milagros. Pero ahora he cogido un proyecto de trabajo y he probado a colocar allí OBJ_EDIT y ha funcionado bien, es decir, es visible encima del formulario. Así que, en general, parece un infierno. Evidentemente, he olvidado o no he tenido en cuenta algo. Pero aun así quería solucionarlo para no cometer el mismo error la próxima vez. Aquí está el código de OnInit() para la prueba:

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

Sí, es lo primero que pensé. Cambiado el orden - mismo resultado. Pero no hay milagros. Pero ahora he cogido un proyecto de trabajo y he probado a colocar allí OBJ_EDIT y ha funcionado bien, es decir, es visible encima del formulario. Así que, en general, parece un infierno. Evidentemente, he olvidado o no he tenido en cuenta algo. Pero aún así me gustaría hacerlo para no cometer este error la próxima vez. Aquí está el código de OnInit() para la prueba:

En este caso, necesitamos un manejador de objetos, para que la cuenta de lo que se crea y en qué orden estaba en un solo lugar, entonces no habrá superposición cuando una función crea este segundo esto, y el cambio de la llamada de la función va a cambiar el orden.

Es difícil detectar este tipo de errores e incluso preverlos.

 
Información para MQ. En el manual de OnTimer hay "... para recibir por EventSetTimer()...". También deberías añadir "... o EventSetMillisecondTimer()...".
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Работа с событиями / EventSetTimer - Документация по MQL5
 

Hola a todos.

Hay un párrafo como este en la ayuda:

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

Así, si hay un ChartEvent en la cola de eventos, no debería ponerse en cola una segunda vez. Tuve un problema con él :)

Dibujé un Asesor Experto para comprobarlo. Resulta que no importa si hay un evento ChartEvent en la cola o no, el manejador ChartEvent es llamado tantas veces como lo genere.

Esto es genial, pero en mi opinión necesito corregir la ayuda... ¿O me equivoco?

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:

Hola a todos.

Hay un párrafo como este en la ayuda:

Así, si hay un ChartEvent en la cola de eventos, no debería ponerse en cola una segunda vez. Tuve un problema con él :)

Dibujé un Asesor Experto para comprobarlo. Resulta que no importa si hay un evento ChartEvent en la cola o no, el manejador ChartEvent es llamado tantas veces como lo genere.

Esto es genial, pero creo que hay que corregir la ayuda... ¿O me equivoco?

Esto sólo se aplica al caso de desbordamiento de la cola, si la cola está llena entonces el tipo de evento que ya está en la cola no se coloca.

Si la cola no está llena (y la longitud de la cola es de 1024), se gestionan todos los eventos.

 
Urain:

Esto sólo se aplica si la cola está llena, si la cola está llena el tipo de evento ya está en la cola no se pondrá en cola.

Pero si la cola no se desborda (y la longitud de la cola creo que es de 1024), entonces todos los eventos se manejan.

Lo tengo. Gracias :)

PD: El Asesor Experto anterior no pudo poner en cola más de 1000.

 
paladin800:
Información para MQ. En el manual de OnTimer hay "... para recibir por EventSetTimer()...". También deberías añadir "... o EventSetMillisecondTimer()...".
Entonces todos pondrán el temporizador de milisegundos aunque no lo necesiten...