Perguntas sobre OOP em MQL5 - página 15

 
Vasiliy Pushkaryov:

Desculpas pela desinformação, escrevi anteriormente que não se pode chamar o método Create() em uma classe infantil.

Agora, duplamente verificado, você pode. Mas o acesso ao membro privado m_button não estava disponível. Ou seja, era impossível verificar, por exemplo, o estado do botão: pressionado/liberado.

Agora, com a dica de Igor, é possível.

Não há problemas com botões lá, não me lembro, mas esta classe tinha métodos prontos ( não campos ) - para determinar o estado, se não, verifique IsActive() ou PropFlags() ou StateFlags() - definitivamente havia algo pronto para descobrir o que está acontecendo com o botão agora

Eu lhe direi o segundo hack com gráficos em MQL - você pode descobrir o nome do botão ( Name()) e por nome encontrá-lo e obter o estado via ObjectGetInteger() e outras funções, mas para evitar fazer isso desajeitadamente, escreva em sua classe métodos para obter as propriedades via ObjectGetInteger()


assim ;)

PS: Eu também tive dificuldades com a SB - não consegui descobrir porque as caixas de seleção são selecionadas após minimizar e maximizar o painel - como se o mouse fosse clicado sobre o objeto... quando percebi que não queria reler a SB inteira, criei meu próprio manipulador que, após minimizar o formulário, definiu a propriedade do objeto desmarcado para minhas caixas de seleção via ObjectSetInteger()

 
Igor Makanu:

não há problema com battons, não me lembro, mas esta classe tinha métodos prontos ( não campos ) - para determinar o estado, se não, então verifique IsActive() ou PropFlags() ou StateFlags() - exatamente o que estava pronto lá para descobrir o que está com o botão agora

Eu lhe direi o segundo hack com gráficos em MQL - você pode descobrir o nome do botão ( Name()) e por nome encontrá-lo e obter o estado via ObjectGetInteger() e outras funções, mas para evitar fazer isso desajeitadamente, escreva em sua classe métodos para obter as propriedades via ObjectGetInteger()

assim ;)

PS: Eu também tive dificuldades com a SB - não consegui descobrir porque as caixas de seleção são selecionadas após minimizar e maximizar o painel - como se meu mouse fosse clicado no objeto... Decidi que não queria reler tudo - construí meu próprio manipulador que, após minimizar o formulário, definiu a propriedade do objeto desmarcado para minhas caixas de seleção via ObjectSetInteger().

Eu também encontrei este problema. Eu precisava colorir a caixa de diálogo com minhas próprias cores. Eles também se revelaram escondidos na seção privada. Consegui resolvê-lo usando um método que utilizou ObjectGetInteger() para pintar os painéis diretamente. E depois de minimizar e desdobrar foi uma bagunça também.

Esta é a aparência do cabeçalho antes de ser minimizado pela primeira vez:


E assim depois.


Também não consegui descobrir porque a cor padrão é devolvida nos botões de fechamento e colapso.

 
Vasiliy Pushkaryov:

Eu também já encontrei isto. Eu precisava colorir a caixa de diálogo da SB em suas próprias cores. Eles também se revelaram escondidos na seção privada. Consegui resolvê-lo usando um método que usa ObjectGetInteger() para pintar o painel diretamente. E depois de minimizar e desdobrar foi uma bagunça também.

Esta é a aparência do cabeçalho antes de ser minimizado pela primeira vez:


E isto é depois.


Também não consegui descobrir por que a cor padrão é devolvida em botões de fechamento e colapso.

Eu dei outra olhada na std local e fiquei convencido da minha decisão de escrever minha própria biblioteca))))
 
Vladimir Simakov:
Mais uma vez eu olhei para o std local e estava convencido da decisão certa de escrever minha biblioteca))))

Eu escrevi sobre o momento do botão aqui, extraído dali:

Desde que você pressione o botão lentamente, cerca de uma vez por segundo, funciona bem. Comece a empurrar um pouco mais rápido e muitas vezes o evento não é interceptado.

Você já notou tais problemas em sua biblioteca? Eu gostaria de saber se é a implementação da SB ou a arquitetura de tratamento de eventos e não há como contorná-la?

 
Vasiliy Pushkaryov:

... Gostaria de saber se esta é a implementação da SB ou é a arquitetura de tratamento de eventos e não há como contorná-la?

Você mesmo pode criar um botão como objeto gráfico sem utilizar a biblioteca e comparar seu funcionamento com um botão criado com a biblioteca.

 
Dmitry Fedoseev:

Você mesmo pode criar um botão como um objeto gráfico sem utilizar a biblioteca e comparar seu funcionamento com um botão criado usando a biblioteca.

Obrigado pela idéia, vou tentar.
 
Vasiliy Pushkaryov:

Escrevi aqui o momento com botões, trecho de lá:

Você já notou tais problemas em sua biblioteca? Eu gostaria de saber se é a implementação da SB ou a arquitetura de tratamento de eventos e você não consegue contorná-la?

Se você estiver escrevendo por conta própria (não no Mercado), é mais fácil fazer janelas com botões em C# e ligar da MQL .dll em C# - qualquer fantasia com botões, ícones, caixas de seleção, etc. é realizada em C# em meia hora - uma hora, mas eu tive que pesquisar no Google durante uma semana.

A única coisa que você precisa fazer é olhar a barra que você tem na pasta de indicadores e usá-la como base - é muito mais rápido criar sua própria interface, mas novamente, esta é a minha experiência - eu entendi dessa maneira

SZS: Acabo de me lembrar, coloquei um painel simples na base de código, não há botões lá, mas há etiquetas de texto e o código é o mais simples possível. https://www.mql5.com/ru/code/25897

 
Dmitry Fedoseev:

Você mesmo pode criar um botão como objeto gráfico sem utilizar a biblioteca e comparar seu desempenho com um botão criado com a biblioteca.

Sim, tirado de um trabalho antigo, quando eu não estava trabalhando com a SB, eu fiz uma espécie de botão de fechamento. Funciona rapidamente:


Acontece que o problema está na implementação da SB.

 
Vasiliy Pushkaryov:

Sim, tirado de um trabalho antigo quando eu não estava trabalhando com a SB, eu fiz uma espécie de botão de fechamento. Funciona rapidamente:


Acontece que o problema está na implementação da SB.

Abiblioteca padrão implica que os controles são criados no formulário. Eles não devem funcionar de forma alguma, assim sem mais nem menos. Pelo menos, era assim que costumava ser.

 
Igor Makanu:

Se você estiver escrevendo por conta própria (não no Mercado), é mais fácil fazer janelas com botões em C# e ligar da MQL .dll em C# - qualquer fantasia com botões, ícones, caixas de seleção, etc. pode ser realizada em C# em meia hora - hora, mas eu tive que pesquisar no Google durante uma semana.

A única coisa que você precisa fazer é olhar a barra que você tem na pasta de indicadores e usá-la como base - é muito mais rápido criar sua própria interface, mas novamente, esta é a minha experiência - eu entendi dessa maneira

ZS: Sim, eu me lembro, eu coloquei um painel simples na base de código, sem botões, mas há etiquetas de texto e o código é o mais simples possível. https://www. mql5.com/ru/code/25897

Não, eu não sei C#.

Vou dar uma olhada no painel, obrigado.

Razão: