Discussão do artigo "Interfaces gráficas X: Ordenação, reconstrução da tabela e controles nas células (build 11)" - página 4

 
Anatoli Kazharski:

1. Quando você terminar de criar uma interface gráfica para seu aplicativo MQL em desenvolvimento, ao preenchê-lo com alguma funcionalidade de negociação, talvez seja necessário inicializar os valores do programa quando ele for carregado/recarregado. Este é apenas um exemplo, pois ele deve funcionar a partir da classe CProgram personalizada. Mostrarei alguns exemplos mais substanciais mais tarde, quando terminar de desenvolver a biblioteca. A segunda etapa será concluída em breve e será possível apresentar exemplos reais de aplicativos MQL usando essa biblioteca.

2. O formulário também deve ter propriedades de extensão semelhantes definidas.

3. Sim, obrigatório.

//---

P.S. No momento, a versão mais recente da biblioteca está neste artigo: GUIs X: Seleção de texto em um campo de entrada de várias linhas (versão 13).


Obrigado, a propósito, notei um erro de estouro de matriz, se você selecionar a última linha no exemplo 11_01 e excluir, por exemplo, a primeira linha e, em seguida, selecionar a última linha novamente, você obtém:

2017.04.19 20:27:52.564 TestLibrary11_01 (RUAL,H1) array out of range in 'CanvasTable.mqh' (1897,19)

Não preste atenção ao nome TestLibrary11_01, este é o exemplo 11_01, a biblioteca é a mais recente, ou seja, a 13ª versão.


Mais uma pergunta: qual método é usado para alterar a etapa de toque nos controles deslizantes de rolagem, pois a etapa padrão é muito pequena?

 
Konstantin:


1. obrigado, a propósito, notei um erro de estouro de matriz, se no exemplo 11_01 selecionar a última linha e excluir, por exemplo, a primeira linha e, em seguida, selecionar a última linha novamente, obteremos: 2017.04.19 20:27:52.564 TestLibrary11_01 (RUAL,H1) array out of range in 'CanvasTable.mqh' (1897,19)

2. Outra pergunta: qual método é usado para alterar a etapa de toque nos controles deslizantes de rolagem, porque a etapa padrão é muito pequena?

1. Vou verificar e corrigir na próxima atualização.

2. Ainda não implementado. Farei isso.

 

Se apenas a funcionalidade da tabela for necessária e a vinculação ao formulário CWindow for obrigatória, é possível não ativar:

1. controles de menu

2. Botão para excluir o formulário

3. Como atualizar os valores das células na tabela? (pergunta removida, eu vi o parâmetro redraw no método SetValue) :))

4. Não está muito claro o método SetValue(const uint column_index,const uint row_index,const string value="",const uint digits=0,const bool redraw=false), por que a divisão em tipo de cadeia de caracteres de dados armazenados e reais? Na minha opinião, é melhor armazenar a cadeia de caracteres na tabela. Mas, se for necessário, é melhor criar dois métodos taticamente.

Não consegui entender o uso do método OnInitEvent, vou esperar por exemplos.

 
Konstantin:

Se apenas a funcionalidade da tabela for necessária e a vinculação ao formulário CWindow for obrigatória, é possível não ativar:

1. controles de menu

2. Botão para excluir o formulário

3. Como atualizar os valores das células na tabela?

Não consegui entender o uso do método OnInitEvent, vou esperar por exemplos.

1. Na classe de usuário do aplicativo MQL CProgram, você mesmo constrói a interface gráfica. Portanto, se você não precisar do menu principal, simplesmente não crie esses elementos nessa classe.

2. Não. Esse é um botão obrigatório no formulário. Você não pode remover acidentalmente o aplicativo do gráfico clicando nele, pois é exibida uma janela para confirmar essa ação.

3. Consulte o exemplo neste artigo: Interfaces gráficas X: Atualizações na tabela desenhada e otimização de código (build 10). Em resumo, use o método CCanvasTable::SetValue().


 
Anatoli Kazharski:

1. Na classe de usuário do aplicativo MQL CProgram, você mesmo constrói a interface gráfica. Portanto, se você não precisar do menu principal, simplesmente não crie esses elementos nessa classe.

2. Não. Esse é um botão obrigatório no formulário. Você não pode remover acidentalmente o aplicativo do gráfico clicando nele, pois será exibida uma janela para confirmar essa ação.

3. Consulte o exemplo neste artigo: Interfaces gráficas X: Atualizações na tabela desenhada e otimização de código (build 10). Em resumo, use o método CCanvasTable::SetValue().



No ponto 2, faça uma seleção de botões para o formulário, até mesmo o MessageBox tem conjuntos de botões personalizáveis. No Qt, também é possível alterar os conjuntos desses botões e, na biblioteca padrão MetaQuotes, eles também podem ser alterados.
 
Konstantin:

...

4. O método SetValue(const uint column_index,const uint row_index,const string value="",const uint digits=0,const bool redraw=false) não está muito claro, por que a divisão em tipo de cadeia de caracteres de dados armazenados e reais? Na minha opinião, é melhor armazenar a cadeia de caracteres na tabela. Mas, se for necessário, é melhor criar dois métodos taticamente.

Não entendo o tipo de dados. Todos eles são armazenados como string. O tipo de dados é especificado para cada coluna pelo método DataType() para classificação. E o parâmetro digits no método SetValue() permite que você especifique o número de dígitos após o separador para cada célula separadamente.
 
Konstantin:

Com relação ao ponto 2, escolha os botões para o formulário, até mesmo o MessageBox tem conjuntos de botões personalizáveis. No Qt, também é possível alterar os conjuntos desses botões e, na biblioteca padrão MetaQuotes, eles também podem ser alterados.

No momento, os botões são:

  1. Fechar janela
  2. Recolher/expandir a janela
  3. Dicas de ferramentas.

O que mais você precisa?

 
Anatoli Kazharski:

Agora há botões:

  1. Fechar janela
  2. Recolher/expandir a janela
  3. Dicas de ferramentas.

O que mais você precisa?


Estou falando sobre eles, que esse conjunto deve ser alterado, pois nem sempre você precisa de todos esses três botões))
 
Anatoli Kazharski:
Não entendo o tipo de dados. Todos eles são armazenados como string. O tipo de dados é especificado para cada coluna usando o método DataType() para classificação. E o parâmetro digits no método SetValue() permite que você especifique o número de dígitos após o separador para cada célula separadamente.


))) Agora entendo, mas o DataType( ) por padrão tem que tipo? Ou não há um estado padrão e é necessário determinar o tipo do valor armazenado antes de adicioná-lo à célula?

PS. Esqueci de escrever que nem sempre as imagens de recursos são carregadas no menu, embora possa ser porque estou sentado em uma virtualização.

 
Konstantin:

Estou falando sobre eles, que esse conjunto deve ser alterado, você nem sempre precisa de todos esses três botões ))

2 e 3 já podem ser deixados de lado. No método de criação de formulário na classe de usuário CProgram , não chame métodos:

   m_window.UseRollButton();
   m_window.UseTooltipsButton();