Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 251

 

Hola, quiero escribir un panel de operaciones para mi EA en dos versiones mql4 y mql5. Todavía no estoy familiarizado con los objetos gráficos. He utilizado un ejemplo de la clase CLabel de la biblioteca estándar para crear un menú móvil. En mql5, el menú funciona bien, pero no en mql4. Cuando se cambia el período de un gráfico, los objetos del menú se duplican y su ubicación relativa cambia. ¿Tal vez, mql4 carece de algunos métodos en la clase CLabel, que mql5 tiene? ¿Podría sugerir qué añadir en esta clase para evitar estos problemas?

También en el código de ejemplo de la clase CLabel no me queda claro qué hacen estas líneas:

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz:

Hola, quiero escribir un panel de operaciones para mi EA en dos versiones mql4 y mql5. Todavía no estoy familiarizado con los objetos gráficos. He utilizado un ejemplo de la clase CLabel de la biblioteca estándar para crear un menú móvil. En mql5, el menú funciona bien, pero no en mql4. Cuando se cambia el período de un gráfico, los objetos del menú se duplican y su ubicación relativa cambia. ¿Tal vez, mql4 carece de algunos métodos en la clase CLabel, que mql5 tiene? ¿Podría sugerir qué añadir en esta clase para evitar estos problemas?

Además, no tengo claro qué hacen estas cadenas en el código del ejemplo de la clase CLabel:


Las líneas especificadas son macros que se escriben en el archivo Defines.mqh. Literalmente, la primera línea de la macro pasa el control a la función de manejo de eventos de la claseCControlsDialog, luego se ejecutan funciones entre estas macros y la última macro pasa el control a la claseCAppDialog

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

Las líneas especificadas son macros, que se escriben en el archivo Defines.mqh. Literalmente, la primera línea de la macro pasa el control a la función de manejo de eventos de la claseCControlsDialog, luego se ejecutan las funciones entre estas macros, y la última macro pasa el control a la claseCAppDialog


Gracias, algo empieza a quedar claro) ¿Y puedes darme un enlace a la documentación sobre el tema de las macros?

 
Aleksandr Teleguz:

Gracias, empieza a tener sentido) ¿Puedes darme un enlace a la documentación sobre el tema de las macros?


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

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

int OnDeinit()

{

Alert("beg OnDeinit()");

// err=StringToInteger(err);

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

return(0);

Alert("end OnDeinit()");

}

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

El err cautivo se describe como un número entero


No veo cuál es el problema.

Recibí el mensaje

 
buyanov:

int OnDeinit()

{

Alert("beg OnDeinit()");

// err=StringToInteger(err);

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

return(0);

Alert("end OnDeinit()");

}

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

El err cautivo se describe como un número entero


No veo cuál es el problema.

Recibí un mensaje


No tengo muy claro cuál es el problema y dónde se genera el error. Si tienes una variable err de tipo int, ¿por qué en la línea comentada intentas convertirla de string a int? ¿Dónde se produce exactamente el error?

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

No está claro cuál es el problema y de dónde viene el error. Si tienes una variable err de tipo int, ¿por qué intentas convertirla de tipo string a int en la cadena comentada? ¿En qué lugar se produce un error?

El caso es que no veo ningún error, pero me sale un mensaje de advertencia implicando la conversión de entero a cadena. En cualquier caso, tenemos que resolverlo.
 
buyanov La cadena de error se describe como un entero No está claro cuál es el problema

El mensaje del compilador indica la línea y la posición del error. Puede hacer clic en la línea de descripción (línea inferior en la imagen) y el cursor indicará el error en el texto del programa. La función DeInit se ejecuta justo antes de que el indicador o Asesor Experto sea eliminado del gráfico. Aquí, por ejemplo, se pueden eliminar los elementos gráficos creados. Si no hay acciones que realizar (la función está vacía) - la función puede ser eliminada... Si tienes algo como la cadena x=125, corrige a cadena x = (cadena)125

En lugar de err=StringToInteger(err); err=StringToInteger((string)err); aunque a algunos les parezca gracioso

 
STARIJ:

El mensaje del compilador indica la línea y la posición del error. Puede hacer clic en la línea de descripción (línea inferior en la imagen) y el cursor indicará el error en el texto del programa. La función DeInit se ejecuta justo antes de que el indicador o Asesor Experto sea eliminado del gráfico. Aquí, por ejemplo, se pueden eliminar los elementos gráficos creados. Si no hay acciones que realizar (la función está vacía) - la función puede ser eliminada... Si tienes algo como cadena x=125 corrige a cadena x = (cadena)125

En lugar de err=StringToInteger(err); err=StringToInteger((string)err); aunque a algunos les parezca gracioso


ms...

Hice lo que usted recomienda

Poner la líneaerr=StringToInteger((string)err) en la función theOption; no hay error.

Pero la advertencia de convicción implícita de cadena a número aún permanece, supongo que habrá que reinstalar el terminal después de todo.

 
buyanov: Hice, como recomendaste, poner la líneaerr=StringToInteger((string)err) en la función OnDeinit; no hay error.

pero la advertencia de la convección implícita de cadena a número aún permanece, supongo que tendré que reinstalar la terminal después de todo.

Por favor, publique su función OnDeinit - la miraré. Y dime qué quieres de él. El MetaEditor genera este error. Tenga una copia de la carpeta del terminal. Aquí Alexey Viktorov contó cómo reinstalar rápidamente