Discussão do artigo "Interfaces Gráficas X: Gestão avançada de listas e tabelas. Otimização do código (build 7)" - página 8
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Muito bem. Vamos continuar com o exemplo que começamos aqui. Complete-o até o nível em que o problema começa a se manifestar.
Não, Tol, é a mesma coisa em seu exemplo - nada mudou. No Table.mqh, eu o adicionei ao último loop:
for(uint c=l; c<m_visible_columns_total; c++)
{
//--- Obter a posição atual do controle deslizante da barra de rolagem vertical
v=m_scrollv.CurrentPos()+t;
//--- Linhas
for(uint r=t; r<m_visible_rows_total; r++)
{
//--- Dados da tabela de deslocamento
if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
{
//--- Ajuste para a linha destacada
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];
//--- Ajustar (1) valores, (2) cor de fundo, (3) cor do texto e (4) alinhamento do texto nas células
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++;
}
Em Programme.mqh, adicionei um cronômetro:
//| Temporizador|
//+------------------------------------------------------------------+
void CProgram::OnTimerEvent(void)
{
CWndEvents::OnTimerEvent();
//--- Pausa entre as atualizações de elementos
if(m_counter1.CheckTimeCounter())
{
//--- Atualizando o segundo item da barra de status
m_status_bar.ValueToItem(1,::TimeToString(::TimeLocal(),TIME_DATE|TIME_SECONDS));
//--- Redesenhar o gráfico
m_chart.Redraw();
}
//--- Pausa entre as atualizações de elementos
if(m_counter2.CheckTimeCounter())
{
//--- Insira o valor do preço do símbolo atual no campo Price da primeira linha
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();
}
//--- Adicionar uma linha à tabela se o número total for menor que o especificado
if(m_table.RowsTotal()<m_spin_edit1.GetValue())
m_table.AddRow();
//--- Adicionar uma coluna à tabela se o número total de colunas for menor que o número especificado.
if(m_table.ColumnsTotal()<m_spin_edit2.GetValue())
m_table.AddColumn();
//--- Adicione um item à lista se o número total for menor que o número especificado.
if(m_listview.ItemsTotal()<m_spin_edit5.GetValue())
{
m_listview.AddItem("SYMBOL "+string(m_listview.ItemsTotal()));
//--- Mova o controle deslizante da barra de rolagem para o final da lista
m_listview.Scrolling();
}
//--- Adicionar um item à lista das caixas de seleção se o número total for menor que o especificado
if(m_checkbox_list.ItemsTotal()<m_spin_edit5.GetValue())
{
m_checkbox_list.AddItem("Checkbox "+string(m_checkbox_list.ItemsTotal()));
//--- Mova o controle deslizante da barra de rolagem para o final da lista
m_checkbox_list.Scrolling();
}
//--- Redesenhar o gráfico
m_chart.Redraw();
}
}
//+------------------------------------------------------------------+
Tudo está igual ao anterior - nenhuma mudança - ele pisca.
Talvez você tenha outra versão do Table.mqh e ela já funcione com essas alterações?
...
Talvez você já tenha uma versão diferente do Table.mqh e ela já funcione com essas alterações?
A versão é a mesma do artigo com o exemplo. Eu mesmo não vejo nenhum problema. Não posso ajudá-lo com mais nada, pois os motivos não estão claros.
E você tem o cronômetro funcionando, o preço é atualizado na tabela a cada novo tique, mas a tabela se comporta normalmente?
Sim.
Você alterou a operação do mouse? Depende do estado do cursor - se você mover o cursor, a linha destacada será destacada, mas piscará; se o cursor estiver no lugar, nenhum destaque da linha será visível.
Tudo o que você está descrevendo funcionava para mim antes das alterações que mencionei. Não vejo nenhum problema agora. Tente recompilar todos os arquivos da biblioteca e verifique novamente.
Não funcionou.
Não é útil.
Preste atenção não apenas ao que é destacado, mas também onde ele é usado:
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Discussão do artigo "Interfaces gráficas X: Gerenciamento avançado de listas e tabelas. Otimização de código (build 7)"
Anatoli Kazharski, 2017.01.24 12:26 pm.
Para evitar que a linha destacada da tabela pisque, adicione estas linhas ao método CTable::UpdateTable() no último loop:
for(uint c=l; c<m_visible_columns_total; c++)
{
//--- Obter a posição atual do controle deslizante da barra de rolagem vertical
v=m_scrollv.CurrentPos()+t;
//--- Linhas
for(uint r=t; r<m_visible_rows_total; r++)
{
//--- Dados da tabela de deslocamento
if(v>=t && v<m_rows_total && h>=l && h<m_columns_total)
{
//--- Ajuste para a linha destacada
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];
//--- Ajustar (1) valores, (2) cor de fundo, (3) cor do texto e (4) alinhamento do texto nas células
SetCellParameters(c,r,m_vcolumns[h].m_vrows[v],back_color,text_color,m_vcolumns[h].m_text_align[v]);
v++;
}
}
//---
h++;
}
//---
E com o resto você precisa de mais detalhes.
O que é isso? :