Discusión sobre el artículo "Interfaces gráficas X: Gestión ampliada de las listas y tablas. Optimización de código (build 7)" - página 8

 
Anatoli Kazharski:
Muy bien. Continuemos con el ejemplo con el que empezamos aquí. Complétalo hasta el nivel en que el problema empieza a manifestarse.

No, Tol, es lo mismo en tu ejemplo - nada ha cambiado. En Table.mqh lo añadí al último bucle:

//--- Columnas
   for(uint c=l; c<m_visible_columns_total; c++)
     {
      //--- Obtener la posición actual del deslizador de la barra de desplazamiento vertical
      v=m_scrollv.CurrentPos()+t;
      //--- Filas
      for(uint r=t; r<m_visible_rows_total; r++)
        {
         //--- Datos de la tabla de desplazamiento
         if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
           {
            //--- Ajuste de la línea resaltada
            color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
            color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];
            //--- Ajuste (1) los valores, (2) el color de fondo, (3) el color del texto y (4) la alineación del texto en las celdas
            SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],m_vcolumns[h].m_cell_color[v],m_vcolumns[h].m_text_color[v],m_vcolumns[h].m_text_align[v]);
            v++;
           }
        }
      //---
      h++;
     }

En Programme.mqh he añadido un temporizador:

//+------------------------------------------------------------------+
//| Temporizador|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
  {
   CWndEvents::OnTimerEvent();
//--- Pausa entre actualizaciones de elementos
   if(m_counter1.CheckTimeCounter())
     {
      //--- Actualización del segundo elemento de la barra de estado
      m_status_bar.ValueToItem(1,::TimeToString(::TimeLocal(),TIME_DATE|TIME_SECONDS));
      //--- Redibujar el gráfico
      m_chart.Redraw();
     }
//--- Pausa entre actualizaciones de elementos
   if(m_counter2.CheckTimeCounter())
     {
      //--- Introduzca el valor del precio del símbolo actual en el Precio de la primera fila
      MqlTick tick;                                                    
      if(SymbolInfoTick(Symbol(),tick))                                
        {                                                              
         int dg=(int)SymbolInfoInteger(Symbol(),SYMBOL_DIGITS);        
         m_table.SetValue(1,1,DoubleToString(tick.bid,dg),dg);         
         m_table.UpdateTable();                                        
        }                                                              
      //--- Añade una fila a la tabla si el número total es menor que el especificado
      if(m_table.RowsTotal()<m_spin_edit1.GetValue())
         m_table.AddRow();
      //--- Añade una columna a la tabla si el número total de columnas es menor que el número especificado.
      if(m_table.ColumnsTotal()<m_spin_edit2.GetValue())
         m_table.AddColumn();
      //--- Añade un elemento a la lista si el número total es menor que el número especificado.
      if(m_listview.ItemsTotal()<m_spin_edit5.GetValue())
        {
         m_listview.AddItem("SYMBOL "+string(m_listview.ItemsTotal()));
         //--- Mover el deslizador de la barra de desplazamiento al final de la lista
         m_listview.Scrolling();
        }
      //--- Añadir un elemento a la lista desde las casillas de verificación si el número total es menor que el especificado.
      if(m_checkbox_list.ItemsTotal()<m_spin_edit5.GetValue())
        {
         m_checkbox_list.AddItem("Checkbox "+string(m_checkbox_list.ItemsTotal()));
         //--- Mover el deslizador de la barra de desplazamiento al final de la lista
         m_checkbox_list.Scrolling();
        }
      //--- Redibujar el gráfico
      m_chart.Redraw();
     }
  }
//+------------------------------------------------------------------+

Todo está igual que antes - ningún cambio - parpadea.

¿Quizás tienes otra versión de Table.mqh y ya funciona con esos cambios?

 
Artyom Trishkin:

...

¿Tal vez usted ya tiene una versión diferente de Table.mqh y ya funciona con estos cambios?

La versión es la misma que en el artículo con el ejemplo. Yo no veo ningún problema. No puedo ayudarte con nada más, ya que las razones no están claras.
 
Anatoli Kazharski:
La versión es la misma que en el artículo con el ejemplo. Yo tampoco veo ningún problema. No puedo ayudarte con nada más, ya que los motivos no están claros.
¿Y tienes un temporizador funcionando, el precio se actualiza en la tabla con cada nuevo tick, pero la tabla se comporta normalmente?
 
Artyom Trishkin:
¿Y tienes el temporizador funcionando, el precio se actualiza en la tabla con cada nuevo tick, pero la tabla se comporta normalmente?
Sí.
 
Anatoli Kazharski:
Sí.
Es un milagro. Me pasa lo mismo en todos los terminales. E incluso en MT4 es exactamente el mismo - sin cambios visibles....
 
Anatoli Kazharski:
¿Ha cambiado el funcionamiento del ratón? Depende del estado del cursor - si mueve el cursor, la línea resaltada se resalta, pero parpadea, si el cursor está en su sitio, entonces no se ve el resaltado de la línea.
 
Artyom Trishkin:
¿Ha cambiado el funcionamiento del ratón? Depende del estado del cursor - si mueves el cursor, la línea resaltada se resalta, pero parpadea, si el cursor está en su sitio, entonces no se ve el resaltado de la línea.
Todo eso que describes, lo tenía antes de los cambios que indiqué. Ahora no veo ningún problema. Prueba a recompilar todos los archivos de la librería y vuelve a mirar.
 
Anatoli Kazharski:
Todo lo que describes me funcionaba antes de los cambios que he mencionado. Ahora no veo ningún problema. Intenta recompilar todos los archivos de la biblioteca y mira de nuevo.
No ayudó.
 
Artyom Trishkin:
No ha funcionado.
Entonces lo único que te queda es intentar resolverlo por tu cuenta.
 
Artyom Trishkin:
No es útil.

Preste atención no sólo a lo que se destaca, sino a dónde se utiliza después:

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.

Discusión del artículo "Interfaces gráficas X: Gestión avanzada de listas y tablas. Optimización del código (build 7)"

Anatoli Kazharski, 2017.01.24 12:26 pm.

Para evitar que la fila resaltada de la tabla parpadee, añade estas líneas al método CTable::UpdateTable() en el último bucle:

//--- Columnas
   for(uint c=l; c<m_visible_columns_total; c++)
     {
      //--- Obtener la posición actual del deslizador de la barra de desplazamiento vertical
      v=m_scrollv.CurrentPos()+t;
      //--- Filas
      for(uint r=t; r<m_visible_rows_total; r++)
        {
         //--- Datos de la tabla de desplazamiento
         if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
           {
            //--- Ajuste de la línea resaltada
            color back_color=(m_selected_item==v) ? m_selected_row_color : m_vcolumns[h].m_cell_color[v];
            color text_color=(m_selected_item==v) ? m_selected_row_text_color : m_vcolumns[h].m_text_color[v];

            //--- Ajuste (1) los valores, (2) el color de fondo, (3) el color del texto y (4) la alineación del texto en las celdas
            SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]);
            v++;
           }
        }
      //---
      h++;
     }

//---

Y con el resto necesitas más detalles.

¿Qué es esto? :

  1. pr.
  2. pr.
  3. pr--