Discusión sobre el artículo "Interfaces gráficas XI: Controles dibujados (build 14.2)"

 

Artículo publicado Interfaces gráficas XI: Controles dibujados (build 14.2):

En la nueva versión de la librería, todos los controles van a dibujarse en los objetos gráficos separados tipo OBJ_BITMAP_LABEL. Además, seguiremos describiendo la optimización del código: es decir, analizaremos los cambios en las clases que representan el núcleo de la librería.

Antes ya hemos dicho que a cualquier control se le puede asignar la transparencia. En la captura de pantalla de abajo se muestra el ejemplo de una ventana semitransparente (CWindow). El valor del canal Alpha es igual a 200.  

Fig. 8. Demostración de la transparencia del formulario para los controles. 

Fig. 8. Demostración de la transparencia del formulario para los controles.

Autor: Anatoli Kazharski

 

Genial, ¿esta es la versión final o habrá más mejoras? Para que si cambio del panel estándar al tuyo no tenga que rehacer muchas cosas en caso de actualizaciones.

 
Maxim Dmitrievsky:

Genial, ¿esta es la versión final o habrá más mejoras? Para que si cambio del panel estándar al tuyo no tenga que rehacer muchas cosas en caso de actualizaciones.

Ahora ya hay un artículo más para publicar con algunas adiciones. Se añadirán campos de entrada y cuadros combinados a las celdas de la tabla.

Como adelanto os puedo mostrar como quedará:


//---

Y hay planes para integrar una librería gráfica estándar, que se describe en este artículo: ¡Visualízalo! Librería gráfica en MQL5 como un análogo de plot de R

Después de esto, me tomaré un descanso. Por fin. )

 

Realmente no entiendo los punteros y tampoco entiendo el método de trabajar con métodos.

Cuando creas por ejemplo un fondo, intellens muestra un montón de métodos que no se aplican al fondo.

Esto causa mucha confusión...

¿Es posible crear objetos de forma que sólo sean visibles los métodos que le son aplicables?


He aquí un ejemplo

clase test

{

int met_1();

int met_2();

int met_3();

int met_4();

int met_5();

};


clase TEST2: public test

{


}

¿Cómo hacer para que sólo 3 4 métodos sean visibles en la clase descendiente y el resto no?

 
Vladimir Pastushak:

...

¿Cómo hacer que sólo 3 4 métodos sean visibles en la clase descendiente y el resto no?

Definir especificadores de acceso.

Guía de referencia MQL5 > Conceptos básicos del lenguaje > Variables > Sección Especificadores de acceso

Los siguientes especificadores se utilizan para acceder a miembros de estructuras y clases:

  • public - permite el acceso sin restricciones a una variable o método de una clase;
  • protected - permite el acceso desde los métodos de esta clase, así como desde los métodos de las clases heredadas públicamente. Cualquier otro acceso es imposible;
  • private - permite el acceso a variables y métodos de la clase sólo desde los métodos de esta clase.
  • virtual - se aplica sólo a los métodos de la clase (pero no a los métodos de estructura) e informa al compilador de que este método debe colocarse en la tabla de funciones virtuales de la clase.

 
Anatoli Kazharski:

Denota especificadores de acceso.

Guía de Referencia MQL5 > Fundamentos del Lenguaje > Variables > Sección de especificadores de acceso.


Lo he leído y he visto lecciones en vídeo, pero no lo entiendo....

¿Puedes darme un ejemplo sencillo?

 
Vladimir Pastushak:

Lo he leído y he visto las lecciones en vídeo, pero no lo consigo....

¿Puedes darme un ejemplo sencillo?

Al menos lee este artículo: Fundamentos de la programación orientada a objetos >>>. Está todo muy claro y hay ejemplos en él.

O abre un hilo con preguntas sobre programación orientada a objetos.

 
Anatoli Kazharski:

Al menos lee este artículo: Fundamentos de la programación orientada a objetos >>>. Todo está muy claro y hay ejemplos en él.

O abre un hilo con preguntas sobre programación orientada a objetos.


Yo me lo he leído todo, el problema es que a ti como programador te parece perfecto o correcto, estás en el tema.

Pero a mi como persona que no estoy en el tema, no me queda claro..... Aunque hace tiempo que escribo en estilo procedural, y estoy intentando dominar los objetos....

 
Vladimir Pastushak:

Realmente no entiendo los punteros y tampoco entiendo el método de trabajar con métodos.

Cuando creas por ejemplo un fondo, intellens muestra un montón de métodos que no se aplican al fondo.

Esto causa mucha confusión...

¿Es posible crear objetos de forma que sólo sean visibles los métodos que le son aplicables?

He aquí un ejemplo

class test

{
int met_1();
int met_2();
int met_3();
int met_4();
int met_5();
};

class TEST2: public test
{
}

¿Cómo puedo hacer que en una clase descendiente sólo sean visibles 3 4 métodos y el resto no?

¿No son aplicables? Los métodos de los objetos padres deben mostrarse. En este caso la documentación puede ayudar. En la biblioteca estándar hemos añadido bloques especiales que muestran los métodos heredados. Por ejemplo, para CWndObj:

 
Vladimir Pastushak:

Me lo he leído todo, el problema es que a ti como programador, que estás en el tema, te parece perfecto o correcto.

Pero a mí, como persona que no está en el tema, no me queda claro..... Aunque hace tiempo que escribo en estilo procedural, y estoy intentando dominar los objetos....

Así que intenta leerlo de nuevo. Hay una respuesta clara a tu pregunta. Más clara imposible.

Pregunta allí o en cualquier otro hilo donde se hable de POO. Aquí estamos discutiendo una librería para crear interfaces gráficas.

 

Hola. Tol, no he encontrado nada en los ejemplos de cómo puedo dibujar una línea divisoria en la ventana ahora.

¿Qué significa índice?

bool CSeparateLine::CreateSeparateLine(const int index,const int x_gap,const int y_gap,const int x_size,const int y_size)

¿Qué parámetro de índice, índice de qué, se debe pasar allí?

Y otra pregunta al mismo tiempo: al dibujar una etiqueta de texto (CTextLabel) sobre el fondo de una ventana que tiene alguna transparencia, las etiquetas se dibujan sobre su fondo opaco, que no responde al método Alpha(), y no se ve bien ..... ¿Es posible hacer que el fondo de las etiquetas también tenga transparencia?