Discussão do artigo "Usando Layouts e Containers para Controles da Interface Gráfica do Usuário (GUI): A Classe CGrid"

 

Novo artigo Usando Layouts e Containers para Controles da Interface Gráfica do Usuário (GUI): A Classe CGrid foi publicado:

Este artigo apresenta um método alternativo de criação da Interface Gráfica do Usuário (GUI) com base em layouts e containers, usando um gerenciador de layout - a classe CGrid. A classe CGrid é um comando auxiliar, atua como um container para outros containers e faz o controle usando um layout de grade.

A classe CGrid é um gerenciador de layout usado no projeto dos controles da Interface Gráfica do Usuário (GUI) para janelas de diálogo no MetaTrader. É uma das classes containers personalizada que pode ser usada na concepção da GUI sem depender de um posicionamento absoluto.

É altamente recomendável ler o artigo sobre a classe CBox, antes de prosseguir com os conceitos discutidos neste artigo.


3. A Classe CGrid

A classe CGrid cria um container para um ou mais controles da GUI e os apresent num arranjo de grade. Um exemplo layout de uma instância da classe CGrid é mostrado na ilustração a seguir:

Layout da classe CGrid

Figura 1. Layout da classe CGrid

Usar esta classe pode ser conveniente, especialmente se os controles a serem adicionados à rede têm dimensões idênticas, tais como um conjunto de botões ou caixas de edição dentro da área de cliente.

O exemplo acima é uma grade de células 4x4 (4 colunas e 4 linhas). No entanto, o nosso objetivo foi desenvolver uma classe que fosse capaz de acomodar qualquer número de linhas e colunas numa grade.

Autor: Enrico Lambino

 

Ótimo trabalho, como sempre, Enrico.

Tentei, mas não consegui, colocar dois campos CEdit um a um, sem espaçamento (posicionamento fixo) - mas parece que a classe só posiciona automaticamente pelo estilo de layout.

É possível fazer isso? Por exemplo, quero um nome de campo e o valor como este:

Total Orders: 3

usando dois CEdit's, mas colocando-os um ao lado do outro?

Obrigado pela atenção

 
Amir Yacoby:

Ótimo trabalho, como sempre, Enrico.

Tentei, mas não consegui, colocar dois campos CEdit um a um, sem espaçamento (posicionamento fixo) - mas parece que a classe só posiciona automaticamente pelo estilo de layout.

É possível fazer isso? Por exemplo, quero um nome de campo e o valor como este:

Total Orders: 3

usando dois CEdit's, mas colocando-os um ao lado do outro?

Obrigado, senhor

De nada.

A grade só aceita um único componente por célula. Se quiser colocar mais de um controle em uma determinada célula, deverá aninhá-los dentro de CBox ou CGrid.

Outra opção seria estender o CGrid(tk) ou o CBox para que você possa especificar diretamente quais controles devem usar posicionamento fixo e quais devem seguir estilos de layout.

 

Ao compilar o "Grid Sample.mq5", recebo o erro:

'm_client_area' - private member access error   GridSample.mqh  78      60
'm_client_area' - private member access error   GridSample.mqh  78      91

Erros

 
Karputov Vladimir:

Ao compilar o "Grid Sample.mq5", recebo o erro:

Acho que a linguagem foi atualizada. Antes era possível chamar a superclasse dessa forma. Mas agora, pelo que vejo, é possível chamar as funções ClientAreaWidth e ClientAreaHeight para instâncias de CDialog e seus herdeiros. O código:

m_main.Create(chart,name+"main",subwin,0,0,ClientAreaWidth(),ClientAreaHeight())

seria a declaração equivalente.