Discussão do artigo "Interfaces gráficas XI: Caixas de Edição de Texto e Caixas de Combinação nas células da tabela (build 15)" - página 3

 
Oleksii Chepurnyi:

Sim.

De fato, sim. Eu me lembro de algo parecido com isso... Agora só preciso lembrar o que mudei :)

Acho que adicionei isso. Keys.mqh

Muito obrigado!
 
Oleksii Chepurnyi:

...

Acho que eu estava adicionando isso. Chaves.mqh

Adicionei-o à atualização mais recente da biblioteca. Estará disponível no próximo artigo como um apêndice.

Além disso, há algumas atualizações para tabelas na classe CTable.

A versão mais recente dessa classe pode ser baixada neste artigo: Visualização de resultados de otimização por critério selecionado

Um pouco mais tarde, será adicionada a versão mais recente da biblioteca que está na base de código: EasyAndFast

 
Anatoli Kazharski:

Adicionado à atualização mais recente da biblioteca. Estará disponível no próximo artigo como um apêndice.

Além disso, há algumas atualizações para tabelas na classe CTable.

A versão mais recente dessa classe pode ser baixada neste artigo: Visualização de resultados de otimização por critério selecionado

Um pouco mais tarde, será adicionada a versão mais recente da biblioteca que está na base de código: EasyAndFast

Se for possível, adicione esse recurso:

Ao especificar o tipo de dados da célula, especifique quantos caracteres após o ponto decimal devem ser desenhados:

Exemplo: m_table.DataType(column,TYPE_DOUBLE,2);

ou especifique o número de caracteres em uma função separada

Exemplo: m_table.DataDigits(column,2);

 
Andrii Djola:

Se for possível, adicione mais um recurso desse tipo:

Ao especificar o tipo de dados da célula, especifique quantos caracteres devem ser desenhados após o ponto decimal:

...

Agora você também pode especificar o número de casas decimais:

//+------------------------------------------------------------------+
//| Preenche a matriz com os índices especificados.
//+------------------------------------------------------------------+
void CTable::SetValue(const uint column_index,const uint row_index,const string value="",const uint digits=0,const bool redraw=false)
  {
//--- Verificar se está fora do intervalo
   if(!CheckOutOfRange(column_index,row_index))
      return;
//--- Defina o valor para uma matriz:
// String
   if(m_columns[column_index].m_data_type==TYPE_STRING)
      m_columns[column_index].m_rows[row_index].m_full_text=value;
//--- Real
   else if(m_columns[column_index].m_data_type==TYPE_DOUBLE)
     {
      m_columns[column_index].m_rows[row_index].m_digits=digits;
      double type_value=::StringToDouble(value);
      m_columns[column_index].m_rows[row_index].m_full_text=::DoubleToString(type_value,digits);
     }
//--- Tempo
   else if(m_columns[column_index].m_data_type==TYPE_DATETIME)
     {
      datetime type_value=::StringToTime(value);
      m_columns[column_index].m_rows[row_index].m_full_text=::TimeToString(type_value);
     }
//--- Qualquer outro tipo será definido como string
   else
      m_columns[column_index].m_rows[row_index].m_full_text=value;
//--- Ajuste e salve o texto se ele não couber na célula
   m_columns[column_index].m_rows[row_index].m_short_text=CorrectingText(column_index,row_index);
//--- Redesenhar a célula, se especificado
   if(redraw)
      RedrawCell(column_index,row_index);
  }
 
Anatoli Kazharski:

Agora você também pode especificar o número de casas decimais:

Sim, mas quando você insere um ponto decimal no campo de entrada, tudo após o ponto decimal é descartado, tive que modificá-lo um pouco!

mas você fez um excelente trabalho!!!!

 
Também encontrei esse problema ao chamar a função Rebuild, as imagens nos botões não são exibidas
 
Andrii Djola:
Também encontrei este problema ao chamar a função Rebuild: as imagens nos botões não são desenhadas

Isso ocorre porque no método CTable::Rebuilding() todas as células são excluídas e novas são criadas. Portanto, depois de reconstruir a tabela, todas as células devem ser preenchidas com dados novamente.

Andrii Djola:

Sim, mas ao inserir um valor com uma vírgulano campo de entrada, tudo após a vírgula é descartado, tive que modificá-lo um pouco!

Mostre-me em detalhes o que você quer dizer.

 
Eu os preencho com a mesma função que usei para criar a tabela, mas ela não desenha nenhuma imagem.
 
Andrii Djola:
Eu as preencho com a mesma função que usei para criar a tabela, mas ela não desenha nenhuma imagem.

Mostre-me o que você está fazendo e como está fazendo. Sem ver, é difícil sugerir algo.

 
Anatoli Kazharski:

Mostre-me o que está fazendo e como está fazendo. Sem ver, é difícil lhe dizer alguma coisa.

Excluí esse código, mas se eu conseguir reproduzi-lo, publicarei aqui!