Crear una biblioteca gráfica desde cero

 
sable
 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Interfaz gráfica de usuario de origen colectivo. Prueba beta abierta.

Alexey Barbashin, 2020.03.07 21:25

"pero quizá sea más fácil hacerlo todo en objetos" - esto es más que lógico

"Sí, por supuesto, vamos a confiar parcialmente en él". - entonces enseguida se nos corrige:

class CCoordPBase

Наследуемся от CObject, то есть:

class CCoordPBase : public CObject

Хотя наверное можно и по другому:

class Control : public CObject

CObject es la clase base de todos los objetos de la biblioteca de desarrolladores. Hecho por analogía con C++ y C#. El objeto base (tipo) en Sharp es Object.

Las coordenadas y las dimensiones son propiedades del control, así como el color del borde, el color y el grosor, los radios de los redondeos, los iconos y el texto.

Primero tenemos que definir qué tipo de control es elemental y luego describir las propiedades básicas.

Por supuesto, algunas de las propiedades definidas anteriormente pueden no ser utilizadas en los descendientes, no es un problema, pero es mejor hacer que la básica sea la más universal.

Para no tener que buscar mucho, he aquí un ejemplo de control universal sencillo:

Contiene fondo, borde, radio, icono y texto

Si necesita una Etiqueta, no se especifica el fondo, el borde y el icono; si necesita un Panel, no se especifica el contenido; si necesita un botón con imagen, sólo se especifica el icono; si necesita un botón con imagen, se especifica el fondo, el borde y la imagen.

Es decir, esta composición es bastante universal para la mayoría de los controles.


Ya veo, la pregunta sobre el cambio de estilo al pasar por encima con el ahorro de coordenadas... aunque ya está bastante claro

¿Existe una norma biliotec por control?

 

La esencia deCObject es tipificar todos los objetos.

Por ejemplo, necesitamos una biblioteca de listas (lista de elementos, cuadro combinado, lista de verificación, etc.). Para cada tipo de elementos podemos crear un tipo de array diferente, como hizo Anatoly, o puedes utilizar una herramienta ya creada:CArrayObj

Es decir, muchas piezas de código no necesitan ser inventadas, ya están ahí, sólo hay que cogerlas y utilizarlas.

 
Alexandr Andreev:

Lo entiendo, la pregunta es sobre el cambio de estilo al pasar por encima manteniendo las coordenadas... aunque parece que ya está claro

¿Hay un bilio estándar en el control?

La biblioteca estándar de los desarrolladores se puede tomar como base, no veo nada vergonzoso en ella, su jerarquía.

Por supuesto, a partir de ahí deberíamos desechar todo lo relacionado con la construcción directa, pero dejar el sistema de transferencia de eventos, ¡es realmente universal!

Con esta tecnología, independientemente de la clase a la que pertenezca incluso el control más complejo, los eventos pasarán por el sistema de tipado del objeto elemental.

El control básico se dibujará en los CControls subyacentes, tras lo cual se generará el evento OnPaint(). Esto permitirá al usuario redibujar/redibujar los controles hijos y, en general, permitirá al usuario redibujar el control como quiera.

 
Alexandr Andreev:

¡¡¡¡¡Vamos!!!!!

y estaba pensando en hacer una simple interacción

donde vamos a introducir posicionamientos como a la izquierda del último objeto en caso de línea o columna

Así que vamos a escribir un controlador universal

Así es exactamente como debe hacerse: escribir la interacción elemental.

Un controlador básico al principio no tiene que tener todas las propiedades necesarias, sólo un fondo es suficiente.

Al fin y al cabo, para renderizar el propio control, éste contendrá la función correspondiente. Así, al añadir cualquier propiedad, tendremos que modificar sólo una función.

¿Según la jerarquía de los elementos?

CObject es un tipo básico

class CControl : public CObject - el control base de la propia biblioteca

class CContainerControl : public CControl - el control del grupo. Uno de sus campos será un array de controles anidados. Puede ver un ejemplo enla biblioteca estándar CWndContainer.

 
Sasha, ya que has empezado a codificar, haz un proyecto de código abierto en MQL. Quién sabe, tal vez haya alguno.
 
Алексей Барбашин:
Sasha, ya que has empezado a codificar, haz un proyecto de código abierto en MQL, podréis desarrollarlo juntos y compartirlo con los demás. Quién sabe, tal vez haya alguno.

Estoy en espera por ahora... mirando las bibliotecas estándar.... hay un montón de cosas innecesarias

No sé si hay muchos, pero sería mejor escribir tu propio código... o heredar

CChartObject

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Алексей Барбашин:
Sasha, ya que has empezado a codificar, haz un proyecto de código abierto en MQL. Quién sabe, tal vez haya alguno.

Creo que es un poco pronto para empezar de cero, tenemos que construir algo primero

 
Alexandr Andreev:

Estoy en espera por ahora... mirando las bibliotecas estándar.... hay un montón de cosas innecesarias

(aunque no mucho)) pero mejor que escriba su propio control... o puede heredarlo

CChartObject

¡No, no!

Observa con atención.

Este controlador es el camino a ninguna parte. No necesitamos objetos gráficos discretos. Tenemos que dibujar en el lienzo: es la única manera de conseguir un desarrollo y unas posibilidades más amplias.

Y el hecho de que tengas que hacer tu propio controlador principal, eso sí.

La biblioteca estándar divide las propiedades y los estados entre CWndObject y CWnd, mientras que nosotros necesitamos unir todo en un solo control.

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

¡No, no!

Observa con atención.

Este controlador es el camino a ninguna parte. No necesitamos objetos gráficos discretos. Tenemos que dibujar en kanvas, eso es lo único que nos dará desarrollo y amplias posibilidades.

Y el hecho de que tengas que hacer tu propio controlador principal, eso sí.

Las propiedades y los estados de la biblioteca estándar están divididos entre CWndObject y CWnd, y necesitamos unirlos todos en un solo control.

Estuve un cuarto de hora intentando crear un proyecto y resultó ser creado, ahora estoy viendo cómo hacerlo público

 
Alexandr Andreev:

Creo que es un poco pronto para empezar de cero.

Estoy seguro de que no es una buena idea empezar de cero.

Gente muy inteligente ha gastado mucho tiempo y conocimientos para hacer la misma biblioteca estándar o la biblioteca de Anatoly.

La gente gastó tiempo y conocimientos y sería una tontería no utilizarlos.

Deberíamos tomar lo mejor, desde nuestro punto de vista, de ambos y construir uno nuevo.

Tenemos que aprender de los errores de los demás. Haremos la nuestra).

Razón de la queja: