Galería de interfaces de usuario escritas en MQL - página 61

 
hini #:
Porque en el tester no llama a OnChartEvent

Muy bien. Pero en la misma situación en MT4 había posibles variantes. Implementé con éxito una de ellas. La interfaz funcionaba para un Asesor Experto ejecutándose en el modo normal, pero podía controlar su copia ejecutándose en el tester. La conexión se realizó a través de recursos. El EA en el gráfico recibió todos los datos durante el proceso de prueba. Con MT5, tal vez, la situación es más complicada. No estoy seguro de que sea posible establecer "comunicación" entre dos copias a través de recursos. Este tema requiere un estudio aparte.

 
Pasemos al siguiente tema:

4. navegar por listas de propiedades de elementos individuales.

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

Permíteme recordarte la lista de temas a tener en cuenta:

1. Orientación en la lista de intellisense y selección de la función de la ventana derecha.

2. 2. Abrir y cerrar ventanas programáticamente.

3. Orientarse en la lista de intellisense y seleccionar el elemento correcto en la ventana correcta.

4. Navegando a través de listas de propiedades de elementos individuales.

5. 5. Análisis sintáctico del nombre de un elemento y de una función envolvente de ventana.

6.devolver el valor del parámetro de un elemento seleccionado a una variable de su tipo. Considerar tres tipos de varios elementos diferentes.

7. Estableciendo valores en los parámetros de diferentes tipos de elementos. Veamos cómo aparecerán los valores en las ventanas de interfaz de estos elementos.

8. Devolver los valores de los parámetros de un elemento, modificando y reenviando ese valor a otro elemento. Consideremos diferentes tipos de elementos y valores, y probemos el reenvío entre diferentes tipos de elementos en diferentes ventanas.

9. Devolución del valor anterior (_V_LAST). Cuándo y para qué casos se requiere el último valor (no confundir con el valor actual).

10. Probar la configuración de estados ON/OFF/LOCK_ON/LOCK_OFF/LOCK/UNLOCK para diferentes tipos de elementos.

11. Intentemos enlazar y sincronizar los cambios de valores de elementos de diferentes tipos: por ejemplo, campo de entrada con botones y deslizador. Supongamos que cuando el valor de un elemento (manual o software) cambia, el valor en el segundo elemento cambia en consecuencia.

12. Intentemos restablecer mediante programación los límites de rango del deslizador y del campo de entrada con botones a través de funciones wrapper. No he tenido tiempo de probarlo, pero algo me sugiere que funcionará. No obstante, vamos a ver.

13. Intentemos devolver estados de elementos a través de funciones wrapper. Está incluido en la funcionalidad, pero no he tenido tiempo de probarlo. Así que veremos... El resultado es desconocido.

14. Vamos a obtener y establecer colores para el texto y las bases de los elementos. Podemos intentar asociar estos colores con algunos eventos simples o límites de valores.

15. Te cuento más sobre cómo navegar y leer la nueva impresión del archivo API.

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

El color amarillo indica los temas que ya se han tratado.

 
Desglosemos el tema punto por punto:

  • Se ha aplicado con éxito el concepto de separar las propiedades en listas, basándose en el "parentesco" de los elementos.
  • Como resultado de la implantación, se han creado 7 listas de propiedades únicas para todos los tipos de elementos.
  • A cada lista se le asigna un identificador especial. Se trata del prefijo p (abreviatura de propiedad) y un número de serie.
  • Como resultado, cada lista puede encontrarse en intellisense mediante siete prefijos: p1, p2, p3, p4, p5, p6 y p7.
  • Por comodidad y para evitar confusiones, los prefijos de las listas de propiedades se imprimen en los nombres de las funciones envoltorio:

  • Al introducir el prefijo, aparece una lista de propiedades individuales. He subrayado la palabra "individuales" a propósito, ya que este punto es de importancia clave.
  • Para devolver y establecer valores de propiedades, las funciones de envoltura aceptan nombres de propiedades SÓLO con el prefijo escrito en su propio nombre:


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


  • SÓLO estas propiedades de la lista están disponibles para la casilla de verificación. Sin embargo, la lista en sí no sólo pertenece a la casilla de verificación, sino también a algunos otros elementos.

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


  • El elemento C_LIST aún no tiene propiedades especiales en su lista. Sólo acciones que pueden ser realizadas por la envoltura (excepto devolver V_LAST - el último valor).

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


  • A diferencia de C_LIST, el deslizador tiene una gran lista de propiedades y acciones disponibles.

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


  • El elemento S_EDIT dispone de una amplia gama de propiedades y acciones:


Énfasis añadido:

Cada función envolvente sólo acepta propiedades con el prefijo escrito en su nombre.


Así es como se ve en la práctica el trabajo con listas(ponga corchetes al final, porque intellisense no funciona dentro de los corchetes de las funciones envoltorio):

El gif está ligeramente acelerado.


Como resultado de las llamadas mostradas en el gif, las funciones envoltorio devuelven los valores de las propiedades especificadas.

Antes de la llamada, debe declarar una variable para almacenar el valor de la propiedad o el resultado de la ejecución de la función. Más información al respecto en los siguientes temas.

 

5.
5.Análisis sintáctico del nombre del elemento y de la función envolvente de la ventana:


1. Nombre de la función envolvente del elemento:

Veamos el ejemplo de función de elemento de campo de entrada de texto EDIT: w7_s_p4_EDIT_Comment_1();

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

  • w7 - ventana número 7

//-------------------------------------------------------------
  • s - Tipo de valor de retorno de esta función envolvente string.

//-------------------------------------------------------------
  • p4 - Prefijo de la lista de propiedades de este tipo de elemento .

/ / - ------------------------------------------------------------
  • EDIT - Tipo de elemento.

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

  • Comment_1 - Nombre del elemento específico.

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


2. El nombre de la función envolvente de la ventana:

Veamos otra función como ejemplo: w_15_Processing_the_data();

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

  • w_15 - ventana número 15
Observe que el número no viene inmediatamente después de w, sino a través del guión _. Esto es importante.

) // - ------------------------------------------------------------
  • Procesando_los_datos - El nombre de esta ventana (para ventanas de aviso el nombre puede no coincidir con Caption - el texto en la cabecera de la ventana).

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

Cabe señalar que la función de ventana aún no dispone de un prefijo para abrir la lista de propiedades. Esta función aparecerá definitivamente. Se generará una lista especial de propiedades de ventana a devolver/establecer, y se le asignará un prefijo. Asimismo, la función de ventana no contiene todavía una letra de tipo de retorno.

Por ahora, la función sólo puede abrir o cerrar una ventana.


Estos defectos se corregirán en la próxima versión.


 
Se recomienda que esta información tutorial se resuma una vez en privado y por separado, de lo contrario inundará los comentarios en el futuro
 
hini #:
Se recomienda resumir esta información de formación una vez en privado y por separado, de lo contrario inundará los comentarios en el futuro
Por supuesto, esta información se resumirá y ordenará como es debido.
 
En el periodo actual, el orden de las instrucciones, explicaciones y comentarios apenas se está formando. El contenido de la futura documentación se acumula armoniosamente en el proceso de desarrollo y comunicación con los usuarios. En consecuencia, la información básica se presenta por partes. Recibir comentarios es necesario y es una etapa importante que aumenta la calidad de las soluciones técnicas. El programa pasa por una fase formativa y podrá alcanzar su plena funcionalidad gracias a la participación activa del público. El resultado será un programa completo con documentación detallada.
 

6.devolver el valordel parámetro o propiedad a una variable del tipo requerido:


El tipo del parámetro del elemento(int, double o string) determina el tipo de la función del elemento.

Se sabe que las funciones de elemento devuelven el valor del parámetro con uno de estos tres tipos: int, double o string.

Sin embargo, las funciones también devuelven valores de propiedades...

Se plantea una situación en la que el tipo del valor del parámetro puede no coincidir con el tipo de las propiedades, que siempre son int. Resulta que las funciones devuelven valores de propiedades del tipo equivocado, por ejemplo double o string en lugar de int . Este inconveniente forzado es el precio de la universalidad de las funciones.

La tarea del usuario consiste en convertir por sí mismo el valor recibido al tipo requerido..


Permítanme hacer hincapié: el tipo principal de todas las propiedades de los elementos es int.


Veamos más detenidamente los ejemplos de pregunta-respuesta:

  • - P: ¿Cómo devolverá la función el valor de una propiedad de tipo int si el tipo de la función es string?
  • - Respuesta: La función devolverá el valor de int con el tipo string.
  • - Pregunta: ¿Cómo devolverá la función el valor deint si el tipo de la función es double?
  • - Respuesta: La función devolverá el valor de int con tipo double.
  • - Pregunta: ¿Cómo devolverá la función el valor double si el tipo de la función es int?
  • - Respuesta: No existen propiedades de elementos de tipo double. Las propiedades del parámetro del elemento pueden ser de tipo double. En este caso, la propia función será de tipo double.


El tipo del valor del parámetro determina el tipo de la función del elemento.

No hay propiedades de un elemento de tipo double. Sólo int. Pero hay propiedades de parámetros que aceptan tipos double, string o int. Por ejemplo, V_CURRENT, V_LAST, V_MAX, V_MIN, V_STEP pueden ser tanto int como double. En ambos casos, la función elemento también se convertirá en int o double. Pero la función no puede convertirse en int si las propiedades del parámetro, o el propio parámetro, no son int.

Y si la función deslizante devuelve tipo int, significa que en la etapa de creación del elemento el propio usuario asignó números enteros a su parámetro o a sus propiedades - por ejemplo, colocó el rango del deslizador o los campos de entrada con botones dentro de valores enteros. .



Conclusión: La tarea del usuario es convertir los valores recibidos al tipo requerido.

Consideremos algunos ejemplos prácticos:

1.

   //------------------------------------------------
   //Текстовое поле ввода EDIT. Тип функции - string.
   //Получение и установка цвета текста и основания:
   //------------------------------------------------
   
   //1. Устанавливаем любой текст в пустое поле ввода:
   w7_s_p4_EDIT_Comment_1("Some random text");
   //------------------------------------------------

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

2.

   //------------------------------------------------
   //2. Получаем цвет основания поля ввода:
   uint Comment_1_base_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_base); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_base_color  ",Comment_1_base_color);
   //------------------------------------------------

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

3.

   //------------------------------------------------
   //3. Назначаем основанию новый цвет:
   w7_s_p4_EDIT_Comment_1((uint)clrWheat,p4_COLOR_base); 
   //------------------------------------------------

Ver el resultado:


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

4.

   //------------------------------------------------
   //4. Получаем цвет текста поля ввода: 
   uint Comment_1_text_color =  (uint)w7_s_p4_EDIT_Comment_1(get_s,p4_COLOR_text); 
   //------------------------------------------------
   //Выводим результат в журнал:
   Print("Comment_1_text_color  ",Comment_1_text_color); 
   //------------------------------------------------


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

5.

   //------------------------------------------------
   //5. Устанавливаем другой цвет тексту:
   w7_s_p4_EDIT_Comment_1((uint)clrRed,p4_COLOR_text); 
   //------------------------------------------------

Ver resultado:




A continuación, probemos a obtener y establecer otras propiedades de elementos y parámetros. Intentemos también trabajar con el tipo double.

Документация по MQL5: Основы языка / Операторы / Оператор возврата return
Документация по MQL5: Основы языка / Операторы / Оператор возврата return
  • www.mql5.com
Оператор return прекращает выполнение текущей функции и возвращает управление вызвавшей программе. Результат вычисления выражения возвращается...
 

He seguido el código y lo he probado, y he encontrado un imprevisto que no se oculta automáticamente cuando la longitud de la cadena aleatoria es demasiado larga

w7_s_p4_EDIT_Comment_1("Some random text AAAAAAAA");


 
Estos son problemas menores, por favor, déjalos para más adelante y a ver qué pasa, si tienes tiempo revísalos, si no ¡no los arregles por ahora!