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

 
Anatoli Kazharski:
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:

//--- Colunas
   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?

 
Artyom Trishkin:

...

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 estou vendo nenhum problema. Não posso ajudá-lo com mais nada, pois os motivos não estão claros.
 
Anatoli Kazharski:
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 um cronômetro funcionando, o preço é atualizado na tabela a cada novo tick, mas a tabela se comporta normalmente?
 
Artyom Trishkin:
E você tem o cronômetro funcionando, o preço é atualizado na tabela a cada novo tique, mas a tabela se comporta normalmente?
Sim.
 
Anatoli Kazharski:
Sim.
É um milagre. Tenho a mesma coisa em todos os terminais. E mesmo no MT4 é exatamente a mesma coisa - sem nenhuma alteração visível....
 
Anatoli Kazharski:
Você alterou a operação do mouse? Depende do estado do cursor - se você mover o cursor, a linha destacada ficará destacada, mas piscará; se o cursor estiver no lugar, não será possível ver o destaque da linha.
 
Artyom Trishkin:
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ê descreve, eu tinha antes das alterações que indiquei. Não vejo nenhum problema agora. Tente recompilar todos os arquivos da biblioteca e verifique novamente.
 
Anatoli Kazharski:
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 ajudou.
 
Artyom Trishkin:
Não funcionou.
Então, a única coisa que resta a fazer é tentar descobrir por conta própria.
 
Artyom Trishkin:
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:

//--- Colunas
   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? :

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