Bibliotecas: EasyAndFastGUI - biblioteca para criar interfaces gráficas do usuário - página 18

 
Marco vd Heijden:

No início, ele foi desenvolvido em MQL4 e MQL5, mas os últimos exemplos são para MQL5.

Isso não significa que não possa ser feito para funcionar em MQL4.

O código geralmente precisa de alguns pequenos ajustes.

Eu estava tentando modificá-lo, mas não consegui. Os complexos arquivos .mqh do MT5 me deixaram frustrado, com tantas variáveis e objetos!

 
17334708:

Eu estava tentando modificá-lo, mas não consegui. Os complexos arquivos .mqh do MT5 me deixaram frustrado, com tantas variáveis e objetos!

A melhor maneira é renomear as variáveis do loop, por exemplo, quando você receber um aviso sobre a variável i, poderá renomear i para i1 nesse loop e, no loop seguinte, para i2 e i3 e assim por diante.

Além disso, não é necessário fazer toda a biblioteca, você pode pegar apenas o elemento de que precisa e convertê-lo, pois os artigos tratam de muitos itens e objetos.

 
Mas alguns elementos estão relacionados entre si. Modificar o loop ou as variáveis torna-se um trabalho sobrecarregado fantástico.
 
Somente se você quiser tudo isso, não se quiser apenas um único elemento.
 
Essa biblioteca pode ser usada em MQL4?
 
O que eu fiz:
Um painel que tem várias caixas de combinação e campos de entrada de números. Há uma caixa de combinação principal, da qual dependem os outros campos

Como deve funcionar:
Quando o valor da caixa de combinação principal muda, os outros campos de entrada e caixas de combinação: algo é ocultado, algo aparece, algo muda sua localização (X,Y)

Que maneiras eu tentei:
1) - Ao selecionar novamente o valor na caixa de combinação principal, todos os elementos desnecessários são excluídos (Delete()) e, em seguida, recriados (Create...()). O resultado: quando você clica em um elemento da caixa de combinação redesenhada, ocorre um array fora do intervalo ao acessar o array de elementos do formulário. Tentei "endurecer" o erro e adicionei uma verificação do tamanho da matriz no local do erro (para que o loop não seja forçado a ir além da matriz); agora, quando ele chega aqui, o formulário simplesmente "trava".

2) - Tentei o método 1), mas ao mesmo tempo adicionei a função WndContainer, que está escrita neste tópico, no início de "DeleteElementsFromArray" - a situação não mudou.

3) - Tentei desenhar todos os elementos com os mesmos valores X,Y (todos os elementos em um ponto), depois ocultá-los imediatamente (Hide()) e, se necessário, alterar seus X,Y (XGap(...), YGap(...)) e desenhá-los (Update(true); Show()). - Há outro problema: alguns dos elementos não ficam ocultos depois de serem ocultados, e a outra parte perde o LabelText (ele fica visualmente ausente).


O que você aconselha?
 
Mikhail Mitin:

adicionei ao WndContainer a função que está escrita neste tópico, no início de "DeleteElementsFromArray" - a situação não mudou


Eu escrevi isso para elementos simples. Combobox não é simples) A versão atual deve excluir os complexos, mas acho que ainda não testei e preciso alterar muitas coisas).

E para ocultar, adicionei a propriedade m_is_hiden aos elementos e em CWndEvents::Show(const uint window_index); os elementos com true são ignorados.

 

Olá, pessoal,

Desenvolver códigos comerciais que usam painéis de elementos gráficos é uma coisa e essa biblioteca é muito útil. No entanto, quando se trata de baixo desempenho ou de bugs que precisam ser reproduzidos,

não há quase nenhuma maneira de contornar o Strategy Tester.

Dito isso, tentar consertar as coisas em um gráfico ao vivo é extremamente tedioso (por exemplo, esperar até que certas condições sejam atendidas para que eu possa clicar nos elementos gráficos... gah)

Seria muito útil se pudéssemos testar adequadamente as coisas dentro do ST!


1. A equipe de desenvolvimento da MetaTrader falou em algum lugar do fórum sobre o motivo pelo qual o void OnChartEvent não está sendo acionado no ST?

2) Há alguma chance de estabelecer uma solução alternativa?


Abraços,
Marcel

 

A macro no arquivo Defines.mqh

#define  TO_STRING(A) #A

não é compatível com Alglib {ap.mqh)

class CSerializer
  {
   //--- enumeração
   enum SMODE { DEFAULT,ALLOC,TO_STRING,FROM_STRING };

Tive de renomeá-la.

 

Depois de instalar a atualização da plataforma no 2132, apareceram erros de compilação:

  • 'WndEvents.mqh' - 'CWndContainer::~CWndContainer' - não é possível acessar a função de membro protegido WndEvents.mqh 11 27
  • 'CWndEvents::~CWndEvents' - não é possível acessar a função de membro protegido WndCreate.mqh 10 27


Como corrigir:

  • No arquivo "WndContainer.mqh", no construtor e no destrutor de "CWndContainer", substitua "protected" por "public".
  • No arquivo "WndEvents.mqh", substitua "protected" por "public" no construtor e no destruidor do arquivo "CWndCreate".
  • no arquivo "WndCreate.mqh", substitua "protected" por "public" no construtor e no destruidor de "CWndCreate".