Discusión sobre el artículo "Aplicación de los contenedores para componer la interfaz gráfica: clase CBox"

 

Artículo publicado Aplicación de los contenedores para componer la interfaz gráfica: clase CBox:

En este artículo se describe el método alternativo de creación de la interfaz gráfica a base de los esquemas de composición y contenedores usando el gestor de composición, a saber, la clase CBox. La clase Cbox representa un medio auxiliar de control que actúa como contenedor de los elementos principales de control de la interfaz gráfica. Facilita el diseño de paneles gráficos, y a veces reduce el tiempo de la escritura del código.

El posicionamiento absoluto de los elementos de control dentro de la ventana de diálogo es la manera más sencilla de crear la interfaz gráfica para una aplicación. No obstante, a veces este enfoque de diseñar la interfaz gráfica de usuario puede ser inconveniente e incluso prácticamente contraproducente. En este artículo se describe el método alternativo de creación de la interfaz gráfica a base de los esquemas de composición y contenedores usando el gestor de composición, a saber, la clase CBox.

La clase del gestor de composición que ha sido implementada y que se utiliza en este artículo parece en términos generales a las clases utilizadas en algunos lenguajes de programación convencionales, como por ejemplo BoxLayout (Java) y Pack geometry manager (Python/Tkinter).

3.1. Estilos de composición

CBox ofrece dos estilos de composición: horizontal y vertical.

La composición base del estilo horizontal es la siguiente:

Estilo horizontal de la clase Clase CBox

Fig. 2. Estilo horizontal (centrado)

La composición base del estilo vertical es la siguiente:

Estilo vertical de la clase Clase CBox

Fig. 3. Estilo vertical (centrado)

Por defecto, CBox utiliza el estilo horizontal.

La combinación de estos tipos de composición (es posible el uso de varios contenedores) permite recrear prácticamente cualquier tipo de la interfaz gráfica. Es más, la distribución de los elementos dentro de los contenedores hace posible el diseño segmentado. En otras palabras, Usted puede cambiar el tamaño y posición de los elementos de control en un determinado contenedor sin afectar estos parámetros de los elementos en otros contenedores.

Autor: Enrico Lambino

 

Muchas gracias Enrico por el artículo, el CBox y los ejemplos! muy útil.

Tengo una pregunta aunque ligeramente no relacionado, ¿qué se debe añadir si quiero que el usuario sea capaz de cambiar el tamaño de diálogo arrastrando el borde de diálogo?

¡Gracias de nuevo!

 
Amir Yacoby:

Tengo una pregunta aunque ligeramente no relacionada, ¿qué debería añadir si quiero que el usuario sea capaz de cambiar el tamaño del diálogo arrastrando el borde del diálogo?

No estoy muy seguro de esto, pero hasta donde yo sé, esa característica no está soportada todavía. Pero sería bueno si eso es posible, ya que los controles individuales y contenedores seguirían sus diseños sin más reposicionamiento (por ejemplo, si los diseños están centrados, el espacio se maximizaría por lo que los controles permanecerían en el centro). En este caso, solo necesitas sobreescribir el método OnResize() de la clase para llamar de nuevo al método Pack() del contenedor CBox principal.
 
Enrico Lambino:
No estoy tan seguro de esto, pero hasta donde yo sé, esa característica no está soportada todavía. Pero sería bueno si eso es posible, ya que los controles individuales y contenedores seguirían sus diseños sin más reposicionamiento (por ejemplo, si los diseños están centrados, el espacio se maximizaría por lo que los controles permanecerían en el centro). En este caso, sólo tiene que anular el método OnResize() de la clase para llamar de nuevo al método Pack() del contenedor CBox principal.
Sí, parece que el terminal MT no es compatible. ¡Gran trabajo, gracias de nuevo!
 

¡una clase asi deberia ser puesta en el estandar por los desarrolladores!

¡¡¡super!!!

 
¡WeChat experiencia libre gritando, otra ganancia de más de mil puntos de grupo QQ: 375124107, además de grupo por favor, tenga en cuenta "77", gracias por la cooperación!
 

¿Dónde está el archivo "Layouts\Box.mqh"?

No he encontrado todo el directorio "Layouts". Gracias.

 
Paul Xiang:

¿Dónde está el archivo "Layouts\Box.mqh"?

No he encontrado todo el directorio "Layouts". Gracias.

Al final de ese post (aquí, y desplázate hasta el final del artículo : https://www.mql5.com/es/articles/1867)
Using Layouts and Containers for GUI Controls: The CBox Class
Using Layouts and Containers for GUI Controls: The CBox Class
  • 2015.07.09
  • Enrico Lambino
  • www.mql5.com
This article presents an alternative method of GUI creation based on layouts and containers, using one layout manager — the CBox class. The CBox class is an auxiliary control that acts as a container for essential controls in a GUI panel. It can make designing graphical panels easier, and in some cases, reduce coding time.
 
Muy interesante ... pero para los novatos, como yo, todos esos archivos ¿dónde deben colocarse?
 
Hola. Muy buena clase pero si ponemos radiogroup o checkgeoup dentro de una caja, no aparece
¿Hay alguna forma de hacerlo funcionar?
Si mantengo el mismo código pero lo añado en la ventana/diálogo principal, puedo ver mi radiogroup

Gracias.
 
LucTelmosse:
Hola. Muy buena clase pero si ponemos radiogroup o checkgeoup dentro de una caja, no aparece
¿Hay alguna forma de hacerlo funcionar?
Si mantengo el mismo código pero lo añado en la ventana/diálogo principal, puedo ver mi radiogroup

Gracias.luc

Hola,

Es posible mostrar un radiogroup o checkgroup. Tengo algunos GUIs que hacen esto. Quizás haya otros problemas, como que no se añada al contenedor CBOx o que el contenedor sea demasiado pequeño. Durante el desarrollo, pongo el fondo (principal y contenedores) de algún color para que sea más fácil ver dónde están los límites. Puedo ayudarte más si puedes mostrar el código, al menos para la función Create() del diálogo principal.