Galería de interfaces de usuario escritas en MQL - página 58
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
Sí, es importante lanzar primero un programa completo.
Hola a todos,
A la luz de la reciente discusión, me gustaría proponer que documentemos los resultados y el progreso del proyecto de Peter Konow en el "Codebase" en lugar de en el foro. El foro es excelente para las discusiones y los comentarios inmediatos, pero carece de la estructura y la coherencia necesarias para presentar el panorama general y las políticas coherentes del proyecto.
Si utilizamos la "Codebase", nos aseguraremos de que toda la información relevante esté organizada, sea fácilmente accesible y ofrezca una visión clara del estado del proyecto. Esto no sólo ayudará a mantener la claridad, sino también a facilitar una mejor colaboración y comprensión entre todos los miembros del equipo y las partes interesadas.
Le agradecería mucho que tuviera en cuenta esta sugerencia.
Utilizando una "Codebase" podemos garantizar que toda la información relevante esté organizada, sea fácilmente accesible y ofrezca una imagen clara de la situación del proyecto. Esto no sólo ayudará a mantener la claridad, sino que también fomentará una mejor cooperación y comprensión entre todos los miembros del equipo y las partes interesadas.
Le agradecería mucho que considerara esta propuesta.
Es una sugerencia muy racional, gracias. Sin duda, la base de código es conveniente para publicar actualizaciones y comunicarse con los usuarios. Es una gran aportación al desarrollo del proyecto. Aunque apenas he utilizado la codebase en el pasado, ahora veo el sentido práctico de explorar las condiciones y adaptarme a los requisitos. Para hacerme una idea de las posibilidades y limitaciones de esta plataforma, buscaré proyectos de miembros conocidos de la comunidad. Tomando su ejemplo, podré llevar a cabo el proyecto en la codebase de forma informativa y competente.
Tengo una versión programada para hoy.
Sin embargo, he decidido seguir el útil consejo de un miembro del foro y publicar la nueva versión en la base de código. Para hacerlo bien, necesitaré unos días para estudiar ejemplos de publicaciones similares, para hacer un plan de funcionamiento paralelo del proyecto en el foro y allí. Y también para pasar por la moderación.
Algunas palabras sobre esta versión:
1. Conceptualizado e implementado un sistema de interacción programática entre un programa de usuario y su interfaz gráfica.
Más detalles:
1. Cuando se llaman con los corchetes vacíos, las funciones devuelven el valor del parámetro elemento con uno de los tres tipos: int, double, string en función del tipo del elemento.
2. Cuando se llaman con un valor entre paréntesis, las funciones establecen el valor pasado al parámetro elemento y luego lo redibujan (el valor se establece en int, double o string, dependiendo del tipo de elemento).
3. cuando se llama con el valor por defecto del primer parámetro y un número de propiedad (de las propiedades disponibles), las funciones devuelven el valor de esta propiedad del elemento (todos los números de propiedad son de tipo int, pasados en el parámetro propiedad).
4 . Cuando se llaman convalor y valor depropiedad entre paréntesis, las funciones establecen los valores pasados a las propiedades disponibles del elemento. El número de propiedad se pasa en el parámetro property , el valor de la propiedadse pasa en el parámetrovalue .
La estructura de los nombres de las funciones-wrapper: w6_i_BUTTON_Start();
1. w es la letra inicial de todas las funciones wrapper. Es una abreviatura de ventana.
2. 6 (u otro número) - el número de secuencia de la ventana que contiene el elemento.
3. i (ya sea d o s) - significa el tipo del valor devuelto/establecido del parámetro del elemento.
4. BUTTON - nombre del tipo de elemento al que pertenece la función envolvente. Puede ser cualquier otro elemento.
5. INICIO - nombre de un elemento específico .
//----------------------------------------------------------------------------------------------------
Aplicación inteligente del sistema intellisense:
Se decidió utilizar un sistema especial de prefijos que ayuda a buscar y encontrar rápidamente las funciones-wrappers necesarias de ventanas y elementos. He aquí un ejemplo:
Todas las funciones-wrapper de ventanas y elementos tienen la letra w al principio. Sin embargo, si pone un guión bajo después de w: _ se abre una ventana intellisense con una lista de nombres de todas las funciones de ventana de la interfaz de usuario. A continuación, tienes que encontrar la ventana con el nombre que buscas en la lista, mirar su número (está impreso en el nombre de la función) y borrar el guión y poner este número después de w. Enseguida aparecerá la lista de intellisense con los nombres de las funciones de los elementos incluidos en la ventana. Así es como se hace:
Esta es una forma sencilla de navegar rápidamente por la lista de funciones de envoltura de elementos. Ni siquiera es necesario imprimirlas.
//----------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------
También se han hecho cambios y adiciones al archivo API. Ahora más información sobre el elemento y la ventana está disponible para el usuario:
Espero probar estas características pronto.
Presento una versión del motor interactuando programáticamente con la GUI.
He hecho mucho. Hay algo que contar y mostrar.
Después de las pruebas públicas lo subiré a la base de código.
Ha resultado algo interesante...
Más detalles mañana.
Adelantándome un poco, puedo decir que he encontrado una solución muy cómoda para los usuarios. Dentro de su código pueden navegar fácilmente a través de ventanas, elementos y propiedades. La solución les permite no recordar los nombres de los elementos o propiedades, sino encontrarlos fácilmente y trabajar con ellos. Al mismo tiempo, cada elemento tiene una lista de propiedades get/set disponibles sólo para él y los elementos "relacionados". Con el prefijo incrustado en el nombre de la función del elemento, el usuario la llama y nunca cometerá el error de intentar devolver o establecer una propiedad que el elemento no tiene.
Las funciones envoltorio han resultado ser tan versátiles y fáciles de usar que yo mismo me sorprendo. Devuelven el valor de un parámetro cuando los corchetes están vacíos, establecen cuando el valor es uno, devuelven el valor de una propiedad de una lista cuando el primer parámetro está vacío y el índice de la propiedad está en el segundo. Establecen un valor a una propiedad cuando hay un valor en el primer parámetro y un índice de propiedad en el segundo. También devuelven una notificación de resultado como 1 en caso de éxito, y -1 en caso de error (valor o propiedad no válidos). Las funciones redibujan los propios elementos. No necesitas ocuparte de esto.
Lo que puedes hacer con las funciones wrapper:
1. 1. Obtener el valor del parámetro del elemento.
2. Establecer el valor de un parámetro de elemento.
3. Obtener valores de propiedades de elementos de la lista individual de propiedades pertenecientes a su tipo de elementos (llamados por el prefijo escrito en el nombre de la función).
4. Establecer valores de propiedades de elementos de la misma lista.
5. Establecer el estado del elemento: neutro, activado, (encendido/apagado), bloqueado neutro, bloqueado activado.
6. Devuelve el estado actual del elemento.
En el primer caso la función devuelve el valor del parámetro.
En el segundo caso devuelve el resultado: éxito o error. El error se envía al log.
En el tercer caso, devuelve el valor de la propiedad.
En el cuarto - resultado: éxito o error de la configuración de la propiedad.
En el quinto, devuelve 1 o -1.
En el sexto - devuelve el índice de estado del elemento (detalles más abajo).
Todo se hace mediante una función envolvente que se imprime automáticamente. Para encontrarla, escribe w_, se abrirá la lista de intellisense, contiene los nombres de las ventanas. En una de ellas está el elemento que buscas. Tienes que recordar más o menos en qué ventana está. Entonces, borra el diablo y escribe el número de la ventana y selecciona la que necesitas de la lista de elementos. Sin memorización.
Tampoco necesitas recordar las propiedades de los elementos. Mira el nombre del elemento, ve el prefijo para abrir una lista de propiedades individuales. Escríbala, ábrala, seleccione la propiedad. No necesitas recordar nada en absoluto. Tampoco hay que teclear nada. Intellisense lo hace todo.
Windows también tiene sus propias envolturas. Pueden abrirlas y cerrarlas. El resto de las características no se han implementado todavía.
Hice una gran actualización al archivo API. Ahora tiene una ENORME cantidad de información más útil sobre el elemento. A saber: prefijos, propiedades individuales, prototipos de la función envolvente del elemento y su ventana, la localización exacta del elemento (tabla, lienzo y pestaña a la que pertenece el elemento, si existe), el tipo de su parámetro (int, double, string...), se imprimen las propiedades de su parámetro (valor.min, valor.max, paso, número de dígitos después del punto decimal). Valor inicial u opción seleccionada (según el elemento). Todo está diseñado bastante legible y comprensible.
He probado parcialmente la nueva funcionalidad y estoy satisfecho con ella. Todo funciona según lo previsto.
Mañana lo mostraré en la práctica.