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
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
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:
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?
...
¿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 tampoco veo ningún problema. No puedo ayudarte con nada más, ya que los motivos no están claros.
¿Y tienes el temporizador funcionando, el precio se actualiza en la tabla con cada nuevo tick, pero la tabla se comporta normalmente?
Sí.
¿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 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 ha funcionado.
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:
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? :