Criar uma biblioteca gráfica a partir do zero

 
sabre
 

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

GUI de origem popular. Testes beta abertos.

Alexey Barbashin, 2020.03.07 21:25

"mas talvez seja mais fácil fazer tudo nos objetos" - isto é mais do que lógico

"Sim, é claro que vamos contar parcialmente com isso". - então imediatamente somos corrigidos:

class CCoordPBase

Наследуемся от CObject, то есть:

class CCoordPBase : public CObject

Хотя наверное можно и по другому:

class Control : public CObject

CObject é a classe base de todos os objetos da biblioteca dos desenvolvedores. Feito por analogia com C++ e C#. O objeto base (tipo) em Sharp é Objeto.

As coordenadas e dimensões são propriedades do controle, assim como a cor da borda, cor e espessura, raios de arredondamento, ícones e texto.

Primeiro temos que definir que tipo de controle é elementar e depois descrever as propriedades básicas.

É claro que algumas das propriedades previamente definidas podem não ser usadas nos descendentes, não é um problema, mas é melhor tornar a básica a mais versátil.

Aqui está um exemplo de um simples controle universal:

Contém fundo, borda, raio, ícone, texto

Se você precisar de uma Etiqueta, você não especifica fundo, borda e ícone; se você precisar de um Painel, o conteúdo não é especificado; se você precisar de um botão de imagem, apenas ícone é especificado; se você precisar de um botão com uma imagem, o fundo, borda e imagem são especificados.

Ou seja, esta composição é bastante universal para a maioria dos controles.


Vejo, a questão da mudança de estilo ao pairar sobre ela mantendo as coordenadas... embora já seja um pouco claro

Existe um biliotec padrão por controle?

 

A essência doCObject é digitar todos os objetos.

Por exemplo, precisamos de uma biblioteca de listas (lista de itens, caixa combinada, lista de verificação, e assim por diante). Para cada tipo de elemento podemos criar um tipo diferente de matriz, como fez Anatoly, ou você pode usar uma ferramenta pronta:CArrayObj

Ou seja, muitas peças de código não precisam ser inventadas, elas já estão lá, basta pegá-las e usá-las.

 
Alexandr Andreev:

Entendo que a questão é mudar o estilo ao pairar enquanto se mantém as coordenadas. embora pareça já estar claro

Existe um bilio padrão no controle?

A biblioteca padrão dos desenvolvedores pode ser tomada como base, eu não vejo nada de vergonhoso nela, sua hierarquia.

Claro que a partir daí devemos jogar fora tudo relacionado à construção direta, mas deixar o sistema de transferência de eventos - é realmente universal!

Com esta tecnologia, não importa a qual classe até mesmo o controle mais complexo pertença, os eventos serão passados através do sistema datilografado do objeto elementar.

O controle básico será desenhado no CControls subjacente, após o qual será gerado o evento OnPaint(). Isto permitirá ao usuário redesenhar/ redesenhar os controles da criança e geralmente permitir que o usuário redesenha o controle da forma que desejar.

 
Alexandr Andreev:

Vamos lá!!!!!

e eu estava pensando em fazer uma simples interação

onde vamos entrar posicionamentos como à esquerda do último objeto em caso de linha ou coluna

Assim, vamos escrever um controlador universal

É exatamente assim que deve ser feito: escrever a interação elementar.

Um controlador básico no início não tem que ter todas as propriedades necessárias, apenas um histórico é suficiente.

Afinal, a fim de tornar o controle em si, ele conterá a função correspondente. Portanto, ao adicionar quaisquer propriedades, teremos que modificar apenas uma função.

De acordo com a hierarquia de elementos?

CObject é um tipo básico

classe CControl : CObject público - o controle de base da própria biblioteca

classe CContainerControl : o controle público CControl - o controle de grupo. Um de seus campos será um conjunto de controles aninhados. Você pode ver um exemplo nabiblioteca padrão CWndContainer.

 
Sasha, desde que você já começou a codificar, faça um projeto open source em MQL. Quem sabe, talvez haja alguns.
 
Алексей Барбашин:
Sasha, desde que você já começou a codificar, faça um projeto open source em MQL, você será capaz de desenvolvê-lo em conjunto e compartilhá-lo com os outros. Quem sabe, talvez haja alguns.

Estou em espera por enquanto... olhando para as bibliotecas padrão.... há um monte de coisas desnecessárias

Não sei se são muitos, mas seria melhor escrever seu próprio código... ou herdar

CChartObject

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 
Алексей Барбашин:
Sasha, desde que você já começou a codificar, faça um projeto open source em MQL. Quem sabe, talvez haja alguns.

Acho que é um pouco cedo para começar do zero, temos que construir algo primeiro

 
Alexandr Andreev:

Estou em espera por enquanto... olhando para as bibliotecas padrão.... há um monte de coisas desnecessárias

(embora não muito))) mas é melhor escrever seu próprio controle. ou você pode herdá-lo

CChartObject

Não, não!!!

Preste atenção!

Este controlador é apenas o caminho para lugar nenhum! Não precisamos de objetos gráficos discretos! Precisamos recorrer à tela - essa é a única maneira de obter desenvolvimento e possibilidades mais amplas.

E o fato de que você tem que fazer seu próprio controlador principal - isso é certo.

A biblioteca padrão divide propriedades e estados entre CWndObject e CWnd, enquanto nós precisamos unir tudo em um único controle.

 
Алексей Барбашин:

Não, não!!!

Preste atenção!

Este controlador é o caminho para lugar nenhum! Não precisamos de objetos gráficos discretos! Precisamos recorrer ao kanvas - isso é a única coisa que nos dará desenvolvimento e amplas possibilidades.

E o fato de que você tem que fazer seu próprio controlador principal - isso é certo.

As propriedades e os estados na biblioteca padrão estão divididos entre CWndObject e CWnd, e precisamos unir todos em um único controle.

Passei um quarto de hora tentando criar um projeto e ele acabou sendo criado, agora estou olhando para como torná-lo público

 
Alexandr Andreev:

Acho que é um pouco cedo para começar com uma tábua rasa.

Tenho certeza de que não é uma boa idéia começar do zero.

Pessoas muito espertas gastaram muito tempo e conhecimento para fazer a mesma biblioteca padrão ou a biblioteca do Anatoly.

As pessoas gastaram tempo e conhecimento e seria uma tolice não usá-lo.

Deveríamos apenas pegar o melhor, do nosso ponto de vista, em ambos e construir um novo.

Precisamos aprender com os erros de outras pessoas. Nós faremos o nosso).