Discussão do artigo "Usando Layouts e Containers para Controles de GUI: A Classe CBox"

 

Novo artigo Usando Layouts e Containers para Controles de GUI: A Classe CBox foi publicado:

Este artigo apresenta um método alternativo de criação de GUI (Interface Gráfica do Usuário) baseado em layouts e containers, usando um gerenciador de layout - a classe CBox. A classe CBox é um controle auxiliar que atua como um container para controles essenciais em um painel de GUI. Ele pode gerar o design gráfico dos painéis facilmente, e, em alguns casos, reduzir o tempo de codificação.

O posicionamento absoluto de controles dentro de uma janela de diálogo do aplicativo é a maneira mais direta de criar uma interface gráfica do usuário para um aplicativo. No entanto, em alguns casos, esta abordagem para o projeto GUI Interface gráfica do usuário pode ser inconveniente, ou mesmo impraticável. Este artigo apresenta um método alternativo de criação de GUI (Interface Gráfica do Usuário) baseado em layouts e containers, usando um gerenciador de layout - a classe CBox.

A classe de gerenciamento de layout implementado e usado neste artigo é aproximadamente equivalente aos encontrados em algumas linguagens de programação convencionais, como BoxLayout (Java) e o Pack geometry manager (Python/Tkinter).

3.1. Layout de Estilos

CBox tem dois estilos de layout: estilo vertical e estilo horizontal.

O estilo horizontal teria o seguinte layout básico:

Estilo Horizontal para Cbox

Figura 2. Estilo Horizontal (Centrado)

O estilo vertical teria o seguinte layout básico:

Estilo para Cbox

Figura 3. Estilo Vertical (Centrado)

CBox usa um estilo horizontal por padrão.

Usando uma combinação destes dois layouts (possivelmente usando múltiplos containers), é possível recriar virtualmente qualquer tipo de concepção do painel GUI. Além disso, a colocação de controles dentro dos containers permitiria uma concepção segmentada. Isto é, ela permite personalizar as dimensões e a posição dos controles num determinado container, sem afetar aquelas realizadas por outros containers.

Autor: Enrico Lambino

 

Muito obrigado, Enrico, pelo artigo, pela CBox e pelos exemplos! Muito úteis.

Tenho uma pergunta, embora ligeiramente não relacionada, o que deve ser adicionado se eu quiser que o usuário possa alterar o tamanho da caixa de diálogo arrastando a borda da caixa de diálogo?

Mais uma vez, obrigado!

 
Amir Yacoby:

Tenho uma pergunta, embora ligeiramente não relacionada, o que deve ser adicionado se eu quiser que o usuário possa alterar o tamanho da caixa de diálogo arrastando a borda da caixa de diálogo?

Não tenho certeza disso, mas, até onde sei, esse recurso ainda não é compatível. Mas seria bom se isso fosse possível, pois os controles e contêineres individuais ainda seguiriam seus layouts sem reposicionamento adicional (por exemplo, se os layouts estiverem centralizados, o espaço seria maximizado para que os controles ainda permanecessem no centro). Nesse caso, você só precisa substituir o método OnResize() da classe para chamar novamente o método Pack() do contêiner CBox principal.
 
Enrico Lambino:
Não tenho certeza disso, mas, até onde sei, esse recurso ainda não é compatível. Mas seria bom se isso fosse possível, pois os controles e contêineres individuais ainda seguiriam seus layouts sem reposicionamento adicional (por exemplo, se os layouts estiverem centralizados, o espaço seria maximizado para que os controles ainda permanecessem no centro). Nesse caso, você só precisa substituir o método OnResize() da classe para chamar novamente o método Pack() do contêiner CBox principal.
Sim, parece que o terminal MT não oferece suporte. Excelente trabalho, mais uma vez obrigado!
 

essa classe deve ser incluída no padrão pelos desenvolvedores!

Muito bom!!!

 
Experiência gratuita do WeChat, mais um lucro de mais de mil pontos do grupo QQ: 375124107, grupo plus, observe "77", obrigado pela cooperação!
 

Onde está o arquivo "Layouts\Box.mqh"?

Não encontrei o diretório inteiro "Layouts". Obrigado.

 
Paul Xiang:

Onde está o arquivo "Layouts\Box.mqh"?

Não encontrei o diretório inteiro "Layouts". Obrigado.

Na parte inferior dessa postagem (aqui, e role até o final do artigo: https: //www.mql5.com/en/articles/1867)
Using Layouts and Containers for GUI Controls: The CBox Class
Using Layouts and Containers for GUI Controls: The CBox Class
  • 2015.07.09
  • Enrico Lambino
  • www.mql5.com
This article presents an alternative method of GUI creation based on layouts and containers, using one layout manager — the CBox class. The CBox class is an auxiliary control that acts as a container for essential controls in a GUI panel. It can make designing graphical panels easier, and in some cases, reduce coding time.
 
Muito interessante... mas para iniciantes, como eu, todos esses arquivos devem ser colocados onde?
 
Olá. A classe é muito boa, mas se colocarmos radiogroup ou checkgeoup dentro de uma caixa, ela não aparecerá
Existe alguma maneira de fazer isso funcionar?
Se eu mantiver o mesmo código, mas adicioná-lo à janela/diálogo principal, poderei ver meu radiogroup

Obrigado, Luc
 
LucTelmosse:
Olá. A classe é muito boa, mas se colocarmos radiogroup ou checkgeoup dentro de uma caixa, ela não aparecerá
Existe alguma maneira de fazer isso funcionar?
Se eu mantiver o mesmo código, mas adicioná-lo à janela/diálogo principal, poderei ver meu radiogroup

Obrigado.luc

Olá,

É possível mostrar um radiogrupo ou grupo de verificação. Tenho algumas GUIs que fazem isso. Talvez haja outros problemas, como não adicionar ao contêiner do CBOx ou o contêiner ser muito pequeno. Durante o desenvolvimento, defino o plano de fundo (principal e contêineres) com alguma cor para facilitar a visualização dos limites. Posso ajudá-lo ainda mais se você puder mostrar o código, pelo menos para a função Create() da caixa de diálogo principal.