Discusión sobre el artículo "Interfaces gráficas X: Control "Hora", control "Lista de las casillas de verificación" y ordenamiento (sort) de la tabla (build 6)" - página 3

 
Artyom Trishkin:

Me refiero en el sitio en el artículo - tal vez allí el viejo fue añadido a las actualizaciones. Tomo el archivo de la última actualización, descargado desde el sitio desde la parte inferior del artículo de la cremallera.

Aquí, hecho las correcciones como he escrito anteriormente:

Genial. O usted puede tener algo clavado allí, como ha sucedido muchas veces. ) Pero en todo caso, voy a tener en cuenta.
 
Anatoli Kazharski:
Bien. Si no, podrías tener algo clavado ahí, como ha pasado muchas veces. ) Pero lo tendré en cuenta.

Me estás obligando a hacer una estupidez.


Pequeña, pero ya ves.

Y podrías cargarlo tú mismo y mirar dentro, es fácil, sobre todo porque te lo han dicho.

 
Artyom Trishkin:

Me estás obligando a hacer algo estúpido.

Es pequeño, pero puedes verlo.

Podrías haberlo descargado tú mismo y mirar dentro, es fácil, sobre todo desde que te lo contaron.

No te pedí ninguna prueba. Sólo he dicho que lo tendré en cuenta. Pero aún no lo he reproducido. Lo tendré en cuenta.

Si hay un problema, tu arreglo puede no funcionar para todos los casos. Funciona para tu caso, pero tienes que probar todos los modos allí. Lo haré yo mismo si encuentro algún problema.

De verdad, no hagas tonterías. )

 
Anatoli Kazharski:

No te pedí ninguna prueba. Sólo dije que lo tendría en cuenta. Pero aún no lo he reproducido. Lo tendré en cuenta.

Si hay un problema, puede que tu solución no funcione para todos los casos. Funciona para tu caso, pero tienes que probar todos los modos allí. Lo haré yo mismo si encuentro algún problema.

De verdad, no hagas tonterías. )

Vale, no lo haré ;)

Tol, pregunta: las tablas se ordenan por columnas - todo es normal. Pero ..., si la tabla tiene filas vacías, y hay muchas, entonces la ordenación incluye también estas filas vacías. Resulta que, digamos que hay una tabla con mil filas (1001 - cero para la cabecera) - de acuerdo con el número máximo de caracteres en la visión general del mercado. Pero en este momento sólo hay 10 caracteres en la visión general del mercado. Están todos en las diez primeras filas de la tabla, de la primera a la décima. El resto de las filas están vacías (las tablas no son dinámicas, y se pueden añadir/eliminar símbolos de la tabla). Si se intenta ordenar una tabla de este tipo, la lista ordenada llega hasta el final de la tabla - hasta las filas 990 - 1000 (cero - la cabecera), y se pueden ver filas vacías en la parte superior. Esto no es bueno y, en mi opinión, es una omisión.

 
Artyom Trishkin:

... las tablas no son dinámicas, y se pueden añadir/eliminar caracteres a/de la tabla...

Pronto serán dinámicas. Estoy trabajando en ello ahora.
 
Anatoli Kazharski:
Pronto será dinámico. Ahora mismo estoy en ello.
¡Genial! ¿Y el problema de incluir filas completamente vacías en la lista ordenada? ¿Qué pasa con eso?
 
Artyom Trishkin:
... ¿Y el problema de incluir filas completamente vacías en la lista ordenada? ¿Qué pasa con eso?
Por ahora se quedará como está. No volveré a la clasificación en un futuro próximo.
 
Anatoli Kazharski:
Seguirá así por ahora. No voy a volver a la clasificación en el corto plazo.
Cierto. Bueno, tengo un sistema de clasificación para necesidades específicas. Y luego puedes modificarlo algún día.
 
Anatoli Kazharski:
...

Lo mismo ocurre con la línea de separación en el menú contextual en ContextMenu.mqh - la barra de separación entre los elementos del menú no está en sus coordenadas.

En el método

//+------------------------------------------------------------------+
//| Crea una línea divisoria|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Guardar el puntero del formulario
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Establecer propiedades
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Crear una línea divisoria
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x,y,m_x_size-10,2))
      return(false);
//--- Guardar el puntero del objeto
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

he sustituido el resaltado por

//+------------------------------------------------------------------+
//| Crea una línea divisoria|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Guardar el puntero del formulario
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Establecer propiedades
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Crear una línea divisoria
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x-m_wnd.X(),y-m_wnd.Y(),m_x_size-10,2))
      return(false);
//--- Guardar el puntero del objeto
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

y la barra separadora está en su lugar.

 
Artyom Trishkin:

Lo mismo con la línea de separación en el menú contextual en ContextMenu.mqh - la línea de separación entre los elementos del menú no está en sus coordenadas.

He reproducido todos estos casos. Esto se aplica a todos los elementos que se utilizan como componentes en otros elementos. Se detecta cuando las coordenadas absolutas iniciales del formulario, al crear la GUI, son mayores que (1,1).

La solución estará en la próxima versión. Como solución rápida temporal, (1) tus ejemplos o (2) simplemente establecer inicialmente el formulario en coordenadas (1,1) funcionará. El segundo es mejor, ya que puede espolvorear en otros modos de posicionamiento de elementos.