Discussão do artigo "Interfaces Gráficas X: Os Controles Horário, Lista de Caixas de Seleção e Tabela Ordenada (build 6)" - página 3

 
Artyom Trishkin:

Quero dizer, no site, no artigo - talvez lá o antigo tenha sido adicionado às atualizações. Peguei o arquivo da última atualização, baixado do site na parte inferior do artigo a partir do zip.

Aqui, fiz as correções conforme escrevi acima:

Ótimo. Ou você pode ter algo pregado lá, como já aconteceu muitas vezes. ) Mas, se for o caso, vou me lembrar.
 
Anatoli Kazharski:
Ah, que bom. Caso contrário, você poderia ter algo pregado ali, como já aconteceu muitas vezes. ) Mas vou me lembrar disso.

Você está me forçando a fazer algo estúpido.


Pequeno, mas você pode ver.

E você poderia simplesmente carregá-lo e olhar dentro dele - é fácil, especialmente porque você foi informado sobre isso.

 
Artyom Trishkin:

Você está me forçando a fazer algo estúpido.

É pequeno, mas você pode vê-lo.

Você mesmo poderia ter feito o download e olhado dentro dele, é fácil, especialmente porque você foi informado sobre ele.

Eu não lhe pedi nenhuma prova. Apenas disse que não me esquecerei disso. Mas ainda não o reproduzi. Vou pensar nisso.

Se houver um problema, sua correção pode não funcionar em todos os casos. Ela funciona no seu caso, mas você precisa testar todos os modos. Eu mesmo farei isso se encontrar um problema.

Realmente, não faça bobagem. )

 
Anatoli Kazharski:

Eu não lhe pedi nenhuma prova. Apenas disse que não me esqueceria disso. Mas ainda não a reproduzi. Vou pensar nisso.

Se houver um problema, sua correção pode não funcionar em todos os casos. Ela funciona no seu caso, mas você precisa testar todos os modos. Eu mesmo farei isso se encontrar um problema.

Realmente, não faça bobagem. )

Ok, não farei ;)

Tol, pergunta: as tabelas são classificadas por colunas - tudo está normal. Mas..., se a tabela tiver linhas vazias, e houver muitas delas, a classificação também incluirá essas linhas vazias. Digamos que haja uma tabela com mil linhas (1001 - zero para o cabeçalho), de acordo com o número máximo de caracteres na visão geral do mercado. Mas, no momento, há apenas 10 caracteres na visão geral do mercado. Todos eles estão na tabela em suas primeiras dez linhas - da primeira à décima. O restante das linhas está vazio (as tabelas não são dinâmicas e os símbolos podem ser adicionados/removidos de/para a tabela). Se você tentar classificar essa tabela, a lista classificada irá até o final da tabela, até as linhas 990 - 1000 (zero - o cabeçalho), e você poderá ver as linhas vazias na parte superior. Isso não é bom e, na minha opinião, é uma omissão.

 
Artyom Trishkin:

... as tabelas não são dinâmicas e os caracteres podem ser adicionados/removidos de/para a tabela...

Elas serão dinâmicas em breve. Estou trabalhando nisso agora.
 
Anatoli Kazharski:
Em breve será dinâmico. Estou no meio disso agora.
Isso é ótimo! E o problema de incluir linhas completamente vazias na lista ordenada? O que acontece com isso?
 
Artyom Trishkin:
... E o problema de incluir linhas completamente vazias na lista ordenada? O que fazer com isso?
Por enquanto, isso permanecerá como está. Não voltarei a classificar tão cedo.
 
Anatoli Kazharski:
Por enquanto, permanecerá assim. Não vou voltar a classificar tão cedo.
Certo. Bem, eu tenho um sistema de classificação para necessidades específicas. E então você pode ajustá-lo algum dia.
 
Anatoli Kazharski:
...

O mesmo acontece com a linha de separação no menu de contexto em ContextMenu.mqh - a barra de separação entre os itens de menu não está em suas coordenadas.

No método:

//+------------------------------------------------------------------+
//| Cria uma linha divisória|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Salvar o ponteiro do formulário
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Definir propriedades
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Criando uma linha divisória
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x,y,m_x_size-10,2))
      return(false);
//--- Salvar o ponteiro do objeto
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

substitui o destacado por

//+------------------------------------------------------------------+
//| Cria uma linha divisória|
//+------------------------------------------------------------------+
bool CContextMenu::CreateSeparateLine(const int line_number,const int x,const int y)
  {
//--- Salvar o ponteiro do formulário
   m_sep_line[line_number].WindowPointer(m_wnd);
//--- Definir propriedades
   m_sep_line[line_number].TypeSepLine(H_SEP_LINE);
   m_sep_line[line_number].DarkColor(m_sepline_dark_color);
   m_sep_line[line_number].LightColor(m_sepline_light_color);
   m_sep_line[line_number].AnchorRightWindowSide(m_anchor_right_window_side);
   m_sep_line[line_number].AnchorBottomWindowSide(m_anchor_bottom_window_side);
//--- Criando uma linha divisória
   if(!m_sep_line[line_number].CreateSeparateLine(m_chart_id,m_subwin,line_number,x-m_wnd.X(),y-m_wnd.Y(),m_x_size-10,2))
      return(false);
//--- Salvar o ponteiro do objeto
   CElement::AddToArray(m_sep_line[line_number].Object(0));
   return(true);
  }
//+------------------------------------------------------------------+

e a barra de separação está em seu lugar.

 
Artyom Trishkin:

O mesmo ocorre com a linha de separação no menu de contexto em ContextMenu.mqh - a linha de separação entre os itens de menu não está em suas coordenadas.

Reproduzi todos esses casos. Isso se aplica a todos os itens que são usados como componentes em outros itens. Ele é detectado quando as coordenadas absolutas iniciais do formulário, ao criar a GUI, são maiores que (1,1).

A correção será feita na próxima compilação. Como uma correção rápida temporária, (1) seus exemplos ou (2) apenas definir inicialmente o formulário nas coordenadas (1,1) funcionarão. A segunda opção é melhor, pois pode incluir outros modos de posicionamento de elementos.