Discussão do artigo "Interfaces gráficas X: Atualizações para a Biblioteca Easy And Fast (Build 2)" - página 4

 

http://prntscr.com/tmjkm3


Olá. Estou trabalhando com o MT4, portanto, infelizmente, tenho estoque com essa última versão do MT4. Aqui está um erro que, por mais que eu tenha tentado, não foi corrigido. Como você pode ver na imagem acima, há uma linha horizontal "perto" da legenda. Caso essa linha horizontal esteja selecionada, se você clicar dentro da legenda, ela saltará para o meio da legenda e começará a se mover com a legenda. Além disso, se houver uma linha horizontal em algum lugar do plano de fundo da janela que esteja selecionada, se você clicar e arrastar dentro da janela quando estiver próximo à linha, ela começará a arrastar a linha. Isso acontece com todos os objetos do gráfico, não apenas com a linha, mas somente quando eles estiverem selecionados.


Em outras palavras, o painel e a legenda não estão "capturando" o evento do mouse e permitindo que ele passe para os objetos abaixo deles. Como corrigir esse problema?

Por favor, alguém pode me ajudar?

Screenshot
Screenshot
  • prnt.sc
Captured with Lightshot
 

Olá,
Entendo que este artigo é a atualização mais recente do mql4 EasyAndFastGUI?
Você pode me dizer como corrigir o aviso "expresion not boolen".


 
Nauris Zukas #:

Olá,
Entendo que este artigo é a atualização mais recente do mql4 EasyAndFastGUI?
Você pode me dizer como corrigir o aviso "expresion not boolen".


Qual é o tipo dem_show_flags ? Se não for bool, então é assim: return((bool)m_show_flags);

 
Artyom Trishkin #:

Qual é o tipo dem_show_flags ? Se não for bool, então retorne((bool)m_show_flags);

uint m_show_flags. Se eu mudar para bool, o aviso desaparecerá, mas como não tenho certeza de que isso não danificará alguma função em algum lugar da cadeia, farei como você aconselhou. Obrigado.

 
Nauris Zukas #:

uint m_show_flags. Se eu mudar isso para bool, o aviso desaparecerá, mas como não tenho certeza de que isso não danificará alguma função em algum lugar da cadeia, farei o que você aconselhou. Obrigado.

Você não pode alterá-la para bool porque ela é um conjunto de sinalizadores. Dessa forma, o valor da variável pode ser maior que 1. Se seu valor for igual a zero, ele será igual ao valor false de uma variável do tipo bool. Portanto, quando o resultado do retorno ao tipo bool é convertido para o tipo bool, qualquer valor de uma variável diferente de zero dará o valor true. Da mesma forma, apenas 0 dará o valor falso.

E como o método (a julgar pelo nome) retorna o sinalizador de visibilidade do objeto, então, com qualquer valor diferente de zero, o método retornará o sinalizador de que o objeto está visível em algum período de tempo. Somente quando o valor da variável for zero é que teremos certeza de que o objeto está oculto em todos os intervalos de tempo.

Posso estar errado quanto à finalidade desse método. Mas parti do pressuposto de que se trata desse conjunto de sinalizadores:

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Видимость объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

E, a propósito, com base no que foi dito acima, você pode escrever o método assim:

bool ShowFlags(void) const { return m_show_flags!=OBJ_NO_PERIODS; }

Assim, você não precisará converter o tipo retornado de uma variável não booleana em um valor do tipo bool - o resultado da verificação é retornado de qualquer forma, que é bool.

Mas a escolha é sua - não há diferença.

 
Artyom Trishkin tipo bool - ele retorna o resultado da verificação de qualquer forma, que é bool.

Mas a escolha é sua - não há diferença.

Artem, na minha opinião, é melhor alterar o tipo da função para uint.

uint ShowFlags(void) const { return m_show_flags; }

Assim, você poderá verificar a visibilidade do objeto em um determinado TF pelo valor recebido dessa função. Afinal de contas, não se trata de um valor específico, mas de um conjunto de sinalizadores...

 
Alexey Viktorov #:

Artem, na minha opinião, é melhor alterar o tipo de função para uint

Assim, será possível verificar a visibilidade do objeto em um determinado TF pelo valor recebido dessa função. Afinal de contas, não se trata de um valor específico, mas de um conjunto de sinalizadores...

Não sabemos o significado desse método. O mais provável é que seja um sinalizador - visível/não visível. E forjar os sinalizadores necessários a partir do resultado é uma complicação para a vida do usuário da biblioteca.

 
Artyom Trishkin #:

Não sabemos o significado desse método. O mais provável é que seja um sinalizador - visível/não visível. E forjar os sinalizadores necessários a partir do resultado está complicando a vida do usuário da biblioteca.

E se eu, como iniciante, estiver interessado em saber se o objeto está visível no gráfico do TF H1 e, usando esse método, obtiver que o objeto está visível no TF M15, respectivamente verdadeiro, mas não o vir no gráfico... Então, como?

Talvez seja melhor adicionar um parâmetro de entrada e verificar a visibilidade no TF especificado. Ou de alguma outra forma, mas nesse formato não está muito claro para mim....

 
Alexey Viktorov #:

E se eu, como iniciante, estiver interessado em saber se o objeto está visível no gráfico do TF H1 e, usando esse método, obtiver que o objeto está visível no TF M15, respectivamente verdadeiro, mas não o vir no gráfico... Então, como?

Talvez seja melhor adicionar um parâmetro de entrada e verificar a visibilidade no TF especificado. Ou de alguma outra forma, mas dessa forma não está muito claro para mim....

Portanto, você deve perguntar a Anatoly. Ou ler o artigo, onde estará escrito para que serve o método em discussão e qual deles usar para as necessidades que você descreve.

A conversa foi sobre um método específico e por que o compilador gera um aviso. O motivo - está claro (tipo errado) - e como corrigi-lo - mostrei-lhe duas opções.