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

Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
12. Obtención/configuración programática de los límites de valor del deslizador y del campo con botones (_V_MIN, _V_MAX, _V_STEP, _DIGITS).
1. Abramos una ventana con elementos con los parámetros anteriores:
2. 2. Escribamos los valores de _V_MIN, _V_MAX, _V_STEP, _DIGITS y enviémoslos al log:
Resultado: se registran los valores de las propiedades de los parámetros del deslizador.
//---------------------------------------------------------------------------------------------------------------------------------------
3. Repitamos la operación con el campo con botones. A diferencia del deslizador, el campo tiene otros límites numéricos y su tipo de valor es doble.
Resultado: losvalores de las propiedades de los parámetros del campo con botones se muestran en el registro.
//---------------------------------------------------------------------------------------------------------------------------------------
4. Establecer otros límites del rango del deslizador (probado por primera vez, el resultado es desconocido).
Resultado: *se ha encontrado unproblema con el rango en números negativos (arreglo en la próxima versión).
Comprobemos con limites de rango positivos:
Resultado: límites de rango cambiados con éxito.
Punto principal: El rango del deslizador puede ser cambiado usando su función.
**Importante:No se puede cambiar retroactivamente el tipo de valor del parámetro de int a double o viceversa.
//-------------------------------------------------------------------------------------------------
Hagamos un experimento similar con el campo de entrada:
Resultado: Funciona según lo previsto. El campo con botones acepta el rango y el paso especificados. Si se sobrepasa el rango, informa de un error en el log.
//--------------------------------------------------------------------------------------------------
5. Por último, vamos a establecer el valor_DIGITOS al campo con botones (el deslizador no funcionará porque su tipo de parámetro es int):
Resultado:
Resultado:
Con esto concluye este tema.
13. Consulta del estado de los elementos _GET_STATE.
A menudo se dan situaciones en las que es necesario obtener mediante programación el estado de uno u otro elemento de la interfaz. Para resolver este problema se crea el identificador _GET_STATE.
//--------------------------------------------------------------------------------------------------------------------
*Importante:En la petición_GET_STATE, la función devuelve el índice del estado actual del elemento.
//--------------------------------------------------------------------------------------------------------------------
La siguiente imagen muestra la lista de estados del elemento.
1. identificadores de estado :
(*en lapróxima versión, el prefijo v_ será sustituido por el prefijo s_)
2. Salida de índices al registro:
Vamos a probar la consulta y recuperación de los estados de los elementos:
1. Abrir la ventana y obtener el estado inicial del botón "Inicio":
Resultado: se obtiene el valor 15 correspondiente al estado v_ESTADO_NEUTRAL.
2. Vamos a registrar los estados del botón al pulsarlo y al soltarlo:
Para ello
Resultado: en el evento pulsado/liberado, el índice de estado actual se imprime en el registro.
Recordatorio:
//----------------------------------------------------------------------------------------------------------------
3. Repitamos la consulta con la casilla de verificación.
1. Obtengamos el estado de la casilla de verificación en el evento de apertura de la ventana:
Resultado: se obtiene el valor 15, correspondiente al estado neutro v_NEUTRAL_STATE (donde está la casilla de verificación).
2. A continuación, vamos a consultar los estados del checkbox en el evento de pulsar y soltar.
Para ello:
Resultado: obtenemos los valores 66 (v_NEUTRAL_HIGHLIGHTED) y 67 (v_ACTIVATED_HIGHLIGHTED), que significan estado resaltado neutral y resaltado pulsado.
//-----------------------------------------------------------------------------------------------
Con esto concluye la primera parte del tema.
En la segunda parte, devolveremos los estados de la lista desplegable D_LIST, el deslizador H_SLIDER y los campos de entrada S_EDIT y EDIT.
13. Petición de estado _GET_STATE.
Parte 2: Obtención de los estados de los elementos D_LIST, H_SLIDER, EDIT, S_EDIT.
En la última parte, vimos cómo devolver mediante programación los estados del botón BUTTON y de la casilla de verificación CHECKBOX . Se utilizó la consulta _GET_STATE y se mostró la lista de nombres de estados devueltos por las funciones. Hay seis nombres en total, donde cada uno comienza con el prefijo v_. (abreviatura de value, que se sustituirá por s_, abreviatura de state).
Recordemos los índices de estado:
En este caso, los números de índice específicos no son importantes. Cuando el usuario necesita poner un estado concreto en una condición, utiliza un identificador.
Ejemplo 1:
Ejemplo 2:
//-----------------------------------------------------------------------------------------------------------------
*Muy importante:
Permítanme explicar la diferencia esencial entre los estados v_NEUTRAL_STATE y v_NEUTRAL_HIGHLIGHTED, y entre v_ACTIVATED_STATE y v_ACTIVATED_HIGHLIGHTED:
v_NEUTRAL_STATE - это нейтральное состояние в котором элемент находится неопределенное время. v_NEUTRAL_HIGHLIGHTED - это нейтральное состояние в которое элемент перешел ТОЛЬКО ЧТО, после отжатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
lo mismo se aplica al estado activado:
v_ACTIVATED_STATE - это активированное состояние в котором элемент находится неопределенное время. v_ACTIVATED_HIGHLIGHTED - это активированное состояние в которое элемент перешел ТОЛЬКО ЧТО, после нажатия пользователя. Поэтому элемент подсвечен - HIGHLIGHTED.
Esta diferencia marca una gran diferencia.
Actualmente, el botón y algunos otros elementos, sólo devuelven v_NEUTRAL_STATE y v_ACTIVATED_STATE, y no devuelven estados HIGHLIGHTED como una casilla de verificación. Esto significa que el usuario no tiene forma de saber si los elementos fueron pulsados/desactivados justo ahora, o cuándo, hace un tiempo indefinido. Sin embargo, el usuario puede captar el momento en que se pulsaron en el archivo API. Sí, pero esta función aún no está disponible en el resto del programa. En la próxima versión, se añadirá el retorno de estado DESTACADO a todos los elementos interactivos. De esta forma, desde cualquier parte del programa, el usuario podrá saber si un elemento acaba de ser pulsado/desc pulsado, o si lleva mucho tiempo en su estado.
//----------------------------------------------------------------------------------------------------------
Pasemos a la parte práctica:
1. Abrir las ventanas:
2. Obtengamos los estados de los elementos:
Resultado: todos los elementos del cnomo D_LISTtienen el índice de estado 15 (estado neutro v_NEUTRAL_STATE). D_LIST devuelve un error (-1).
Motivo: la devolución de estados de este elemento no está especificada en la función central. Defecto técnico.Se corregirá en la próxima versión.
Dado que la función D_LIST aún no devuelve el índice de estados, centrémonos en tres elementos cuyos estados se han recibido correctamente: EDIT , S_EDIT y H_SLIDER.
Qué hay que comprobar:
Acabamos de comprobar que las funciones de los elementos EDIT, S_EDIT y H_SLIDER devuelven un índice del estado neutro cuando se abre la ventana. Queda por comprobar los demás estados. Como este tipo de elementos, en teoría, sólo pueden estar en estado neutro, bloqueado y resaltado(a diferencia de los botones y las casillas de verificación, que tienen más estados), tenemos que comprobar los dos estados posibles siguientes: bloqueado y resaltado. También hay un grupo de estados"bajo cursor", que no quiero añadir todavía para evitar confusiones. En las próximas versiones crearé un prefijo especial que abra una lista individual de posibles estados de cada tipo de elemento. Esto facilitará el trabajo programático.
Como comprobaremos el retorno de los estados bloqueados y resaltadosEDIT, S_EDIT y H_SLIDER:
1. Encuentre la casilla "Establecer una opción" en el fichero API y escriba el bloqueo/desbloqueo de los elementosEDIT, S_EDIT y H_SLIDER dentro de su caja.A continuación, imprima los estados mediante Print().
Resultado:
//--------------------------------------------------------------------------------------------------
2. Segunda tarea:
Puesta en marcha:
Resultado:
//-----------------------------------------------------------------------------------------------------
Resultados:
En general, los resultados pueden valorarse como satisfactorios. Los elementos devuelven los índices de los estados neutro y bloqueado como se pretendía. Sin embargo, hay algunas deficiencias:
Conclusiones:
Potencialmente, es posible añadir nuevos estados de elementos. Por ejemplo, Neutro apuntado y Activado apuntado ( neutro bajo el cursor y activado bajo el cursor), pero hay una cuestión de practicidad y de la necesidad real del usuario de disponer de estas características. Hasta que no se reciban tales requerimientos, no añadiré nuevos estados.
Este es el final de este tema.
Más adelante, a los siguientes temas.
He pasado la última semana investigando cómo escribir una interfaz usando WinForm e incrustarla en los gráficos de MT5. Hoy por fin lo he conseguido.
Una lista general de temas a tener en cuenta:
1. Orientación en la lista de intellisense y la selección de la función de la ventana de la derecha.
2. 2. Abrir y cerrar ventanas mediante programación.
3. Abrir una lista de elementos de ventana disponibles mediante programación.
4. Abrir una lista de propiedades de elementos individuales.
5. 5. Análisis sintáctico del nombre del elemento y de la función envolvente de la ventana.
6. Devolución del valor de un parámetro de elemento a una variable de su tipo.
7. Establecer valores a parámetros de elementos de diferentes tipos.
8. 8. Devolución, modificación y reenvío de valores entre parámetros de elementos diferentes. Considerar diferentes tipos de elementos y valores, y probar 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. 10. Prueba de estados ON, OFF, LOCK_ON, LOCK_OFF, LOCK, UNLOCK para diferentes tipos de elementos.
11. Prueba de vinculación y sincronización de los valores cambiantes de los elementos: por ejemplo, campo de entrada con botones y deslizador. Para que cuando cambie el valor de un elemento (manual o software), cambie en consecuencia el valor en el segundo elemento.
12. Prueba de obtención/configuración por software de los límites de rango del deslizador y del campo con botones (propiedades _V_MIN, _V_MAX, _V_STEP, _DIGITS).
13. Pruebas de funcionamiento de la consulta del estado de los elementos (_GET_STATE).
14. Vinculación de los colores del texto y del borde a los límites espaciados de los valores.
15. Orientación en el fichero API.
16.Implementación de una lógica de programa simple de aparición de ventanas de mensajes y avisos.
//------------------------------------------
Los temas que se han considerado están resaltados en amarillo.
Por el momento quedan algunos por considerar:
14. Vinculación de los colores del texto y del marco a los límites de los valores espaciados.
15. 15. Orientación en el archivo API.
16.Implementación de una lógica de programa simple de aparición de ventanas de mensajes y avisos.
//------------------------------------------
Sugiero enlazar el tema 14 con el tema 16. Sobrepasar los límites establecidos de los valores de los parámetros provocará primero señales en forma de cambio de color de partes de los elementos (texto, base, marco, franja, etc.), luego la apertura de una ventana de diálogo, y después una ventana de advertencia. Al mismo tiempo, la ventana de advertencia bloqueará los cambios de valores en los elementos hasta que el usuario la cierre manualmente.
Además, me gustaría añadir un tema a la lista:
17. Cancelar los ajustes introducidos cuando el usuario pulsa el botón "Cancelar".
Hace mucho tiempo, se desarrolló y hasta cierto punto se probó la tecnología de cancelar los ajustes del usuario haciendo clic en el botón "Cancelar". Por el momento, no se sabe hasta qué punto funciona la funcionalidad anterior. Por lo tanto, es necesario realizar una prueba.
Debido al solapamiento de temas, el orden de revisión será el siguiente:
14. Implementación de la protección de límites de parámetros escalonados:
15. Consideremos en detalle la impresión del nuevo archivo API.
//----------------------------------------------------------------------------------------------------
A continuación, voy a recoger todos los errores o defectos encontrados y hacer una lista de tareas para la próxima versión.
Después de la próxima versión con correcciones y adiciones, me centraré en las tablas, en las que veo una de las principales direcciones de desarrollo futuro del motor.
He pasado la última semana aprendiendo cómo escribir una interfaz usando WinForm y construirla en los gráficos de MT5. Hoy por fin he descubierto cómo hacerlo.
¿Y cómo vas a hacer que la interfaz se comunique con tu código de programación?
¿Y cómo va a establecer una conexión entre la interfaz y su código de programación?
Algunas preguntas más: