Discusión sobre el artículo "Interfaces gráficas IX: Elementos "Indicador de progreso" y "Gráfico lineal" (Capítulo 2)"

 

Artículo publicado Interfaces gráficas IX: Elementos "Indicador de progreso" y "Gráfico lineal" (Capítulo 2):

El segundo capítulo de la novena parte de la serie estará dedicada a los elementos «Indicador de progreso» y «Gráfico lineal». Como siempre mostraremos los ejemplos detallados de cómo puede usar estos elementos en sus aplicaciones MQL.

Vamos a nombrar todos los componentes que van a formar parte del elemento «Indicador de progreso» en nuestra librería.

  1. Fondo
  2. Descripción
  3. Barra del indicador
  4. Fondo del indicador
  5. Índice porcentual



Fig. 1. Partes integrantes del control “Indicador de progreso”.

Autor: Anatoli Kazharski

 

¡Super!

Desde mi punto de vista, ahora usted está definitivamente por delante de todos los desarrolladores de gráficos MQL.

He concluido por mí mismo que tengo algo a lo que aspirar.

¡El resultado es increíble!

Buena suerte en el desarrollo futuro.

 
Реter Konow:

¡Super!

Desde mi punto de vista, ahora usted está definitivamente por delante de todos los desarrolladores de gráficos MQL.

He concluido por mí mismo que tengo algo a lo que aspirar.

¡El resultado es increíble!

Buena suerte en el desarrollo futuro.

Siempre hay algo a lo que aspirar. )

Aquí, mira las obras del maestro, que te inspirarán aún más: Yuri Kulikov >>>>

 
Anatoli Kazharski:

Siempre hay algo por lo que luchar. )

Aquí tienes un vistazo a las obras del maestro que te inspirarán aún más: Yuri Kulikov >>>.

¡Gracias, realmente impresionante!

Quería hacerte una pregunta...

Has creado tu proyecto usando OOP. Has implementado casi todos los controles básicos. Has creado una rica librería...

Al mismo tiempo, ¿cuánto del código ya has utilizado en tu trabajo?

Por ejemplo, ¿cuánto usaste de la librería de controles en MT, Canvas, etc...?

Personalmente, tuve que crear todo desde cero y en una tecnología completamente nueva, en la que era imposible utilizar cosas ya trabajadas.

En el futuro, el desarrollo de mi proyecto tampoco podrá ser continuado por otros desarrolladores y no podrán participar en su desarrollo, porque la tecnología no es familiar para nadie más que para mí.

En tu caso, es lo contrario... Todos los programadores podrán participar en la mejora y desarrollo de tu librería.

Y lo único que puede impedirlo es la pereza.

 
Реter Konow:

Al mismo tiempo, ¿cuánto del código ya has utilizado en tu trabajo?

Por ejemplo, ¿cuánto usaste de la librería de controles en MT, Canvas, etc.?

En el primer artículo de esta serie, respondí a esta pregunta: GUIs I: Preparando la Estructura de la Librería (Capítulo 1). Allí se muestra la estructura de las clases de la librería estándar para trabajar con objetos-primitivos gráficos estándar.

La lista de clases que uso en el proyecto es:

Lo ideal sería que sólo quedara una clase: CCanvas. Un tema útil sobre este tema está aquí: Doing a crowdsource project on Canvas >>>

Antes de empezar el desarrollo, estudié la biblioteca estándar para la creación de interfaces gráficas y la versión de Dmitry Fedoseev. Luego hice una lista de lo que personalmente me falta y empecé a trabajar en el proyecto. La lista de lo que falta por hacer sigue siendo bastante grande y se actualiza constantemente con sugerencias de otros usuarios interesados. Lo que pasa es que todo se está haciendo sobre todo en correspondencia personal. También estamos trabajando en los fallos y errores que se van revelando poco a poco al utilizar la biblioteca en nuestros proyectos.

Lo único que puede impedirlo es la pereza.

No hay ningún problema con ello. )

 
Anatoli Kazharski:

En el primer artículo de esta serie respondí a esta pregunta: Interfaces gráficas I: Preparando la Estructura de la Librería (Capítulo 1). Allí se muestra la estructura de clases de una librería estándar para trabajar con objetos gráficos primitivos estándar.

La lista de clases que uso en el proyecto es:

Lo ideal sería que sólo quedara una clase: CCanvas. Tema útil sobre este tema: Hacer un proyecto crowdsource sobre Canvas >>>

Antes de empezar el desarrollo, estudié la biblioteca estándar para la creación de interfaces gráficas y la versión de Dmitry Fedoseev. Luego hice una lista de lo que personalmente me falta y empecé a trabajar en el proyecto. La lista de lo que falta por hacer sigue siendo bastante grande y se actualiza constantemente con sugerencias de otros usuarios interesados. Lo que pasa es que todo se está haciendo sobre todo en correspondencia personal. También estoy trabajando en los bugs y errores que se van revelando poco a poco al utilizar la librería en mis proyectos.

No hay ningún problema con eso. )

Gracias por la respuesta detallada. )

Le deseo más trabajo productivo.

 

Anatoly, disculpa la intromisión, pero me gustaría saber cómo es posible actualizar la barra de progreso dentro de un bucle con cálculos pesados.

Por ejemplo, tenemos una barra de progreso m_progress_bar, tenemos un bucle dentro de CProgram

   m_progress_bar.Show();  // no tiene sentido, ya que ya es visible inmediatamente al mostrar la ventana (m_window.Show()) a la que está vinculada,
                           // y me gustaría crearlo en estado oculto, y mostrarlo cuando sea necesario
   int total=1000;         // un cierto número de iteraciones del bucle, que desea mostrar con la barra de progreso 
   for(int i=0;i<total;i++)
     {
      Func();  // Función con cálculos pesados en cada iteración del bucle
      m_progress_bar.Update(i,total);  // no hace nada: la barra de progreso está en "colgado" - su estado inicial.
     }
   //--- la barra de progreso debe ocultarse cuando el ciclo se haya completado, 
   //--- y en esta situación no se actualiza durante el bucle y luego se oculta superponiéndolo con otro objeto 
   m_progress_bar.Hide();  // no oculta la barra de progreso por alguna razón, tengo que ocultarla bajo otro objeto gráfico.

¿Podrías explicarme en un ejemplo tan "abstracto" lo que no entiendo?

 
No estaría de más pasar algunos datos.... Artem, es sólo un tipo de datos, y el valor debe ser asignado.
 
Алексей Тарабанов:
No estaría mal pasar algunos datos.

¿Qué te parece esto?

m_progress_bar.Update(i,total);
 
Artyom Trishkin:

¿Qué te parece esto?

No funciona.
 
Алексей Тарабанов:
No funciona.

¿Por qué no funciona?

//+------------------------------------------------------------------+
//|| Actualiza la barra de progreso|
//+------------------------------------------------------------------+
void CProgressBar::Update(const int index,const int total)
  {
//--- Establecer nuevo índice
   CurrentIndex(index);
//--- Establecer nuevo rango
   StepsTotal(total);
//--- Calcular la anchura del indicador
   double new_width=(m_current_index/m_steps_total)*m_bar_bg.XSize();
//--- Ajustar si es menor que 1
   if((int)new_width<1)
      new_width=1;
   else
     {
      //--- Ajustar a la anchura del marco
      int x_size=m_bar_bg.XSize()-(m_bar_border_width*2);
      //--- Ajustar si fuera de los límites
      if((int)new_width>=x_size)
         new_width=x_size;
     }
//--- Establecer un nuevo ancho para el indicador
   m_indicator.X_Size((int)new_width);
//--- Calcula el porcentaje y forma una cadena
   double percent =m_current_index/m_steps_total*100;
   string desc    =::DoubleToString((percent>100)? 100 : percent,m_digits)+"%";
//--- Establecer el nuevo valor
   m_percent.Description(desc);
  }
//+------------------------------------------------------------------+