Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 251

 

Olá, quero escrever um painel comercial para minha EA em duas versões mql4 e mql5. Ainda não estou familiarizado com objetos gráficos. Usei um exemplo da classe CLabel da biblioteca padrão para criar um menu em movimento. Em mql5, o menu funciona bem, mas não em mql4. Quando um período gráfico é alterado, os objetos do menu são duplicados e sua localização em relação um ao outro muda. Talvez, o mql4 carece de alguns métodos na classe CLabel, que o mql5 tem? Você poderia sugerir o que acrescentar a esta classe para evitar tais problemas?

Também no código de exemplo da classe CLabel não está claro para mim o que estas linhas fazem:

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz:

Olá, quero escrever um painel comercial para minha EA em duas versões mql4 e mql5. Ainda não estou familiarizado com objetos gráficos. Usei um exemplo da classe CLabel da biblioteca padrão para criar um menu em movimento. Em mql5, o menu funciona bem, mas não em mql4. Quando um período gráfico é alterado, os objetos do menu são duplicados e sua localização em relação um ao outro muda. Talvez, o mql4 carece de alguns métodos na classe CLabel, que o mql5 tem? Você poderia sugerir o que acrescentar a esta classe para evitar tais problemas?

Além disso, não estou claro o que estas cordas fazem no exemplo do código da classe CLabel:


As linhas especificadas são macros que estão escritas no arquivo Defines.mqh. Literalmente, a primeira linha de controle de macro passa para a função de tratamento de eventos da classeCControlsDialog, depois as funções são executadas entre essas macros e a última macro passa o controle para a classeCAppDialog

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

As linhas especificadas são macros, que estão escritas no arquivo Defines.mqh. Literalmente, a primeira macro linha passa o controle para a função de manuseio de eventos da classeCControlsDialog, depois as funções entre essas macros são executadas, e a última macro passa o controle para a classeCAppDialog.


Obrigado, algo está começando a ficar claro) E você pode me dar um link para a documentação sobre o tópico de macros?

 
Aleksandr Teleguz:

Obrigado, está começando a fazer sentido) Você pode me dar um link para a documentação sobre o tópico de macros?


https://www.mql5.com/ru/docs/basis/preprosessor/constant

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Основы языка / Препроцессор / Макроподстановка (#define) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

int OnDeinit()

{

Alerta("beg OnDeinit()");

// err=StringToInteger(err);

//------------------------

retorno(0);

Alerta("fim OnDeinit()");

}

//OnDeinit();-----------

O erro cativo é descrito como um número inteiro


Não vejo qual é o problema.

Recebi a mensagem

 
buyanov:

int OnDeinit()

{

Alerta("beg OnDeinit()");

// err=StringToInteger(err);

//------------------------

retorno(0);

Alerta("fim OnDeinit()");

}

//OnDeinit();-----------

O erro cativo é descrito como um número inteiro


Não vejo qual é o problema.

Eu recebi uma mensagem


Não estou bem claro qual é a questão e onde o erro é gerado. Se você tem uma variável errada do tipo int, por que na linha comentada você está tentando convertê-la de string para int? Onde exatamente o erro ocorre?

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

Não está claro qual é a questão e de onde vem o erro. Se você tem um erro variável do tipo int, por que você está tentando convertê-lo de string para int na string comentada? Em que lugar ocorre um erro?

O problema é que não vejo nenhum erro, mas recebo uma mensagem de aviso implícita de conversão inteira em string. Em qualquer caso, precisamos descobrir.
 
buyanov A cadeia de erros é descrita como um número inteiro Não está claro qual é o problema

A mensagem do compilador indica a linha e a posição do erro. Você pode clicar na linha de descrição (linha inferior na figura) e o cursor indicará o erro no texto do programa. A função DeInit é executada imediatamente antes que o indicador ou o Expert Advisor seja removido do gráfico. Aqui, por exemplo, os elementos gráficos criados podem ser excluídos. Se não houver ações a serem realizadas (a função está vazia) - a função pode ser apagada... Se você tem algo como corda x=125, corrigir para corda x = (corda)125

Ao invés de err=StringToInteger(err); err=StringToInteger((string)err); embora alguns possam achar engraçado

 
STARIJ:

A mensagem do compilador indica a linha e a posição do erro. Você pode clicar na linha de descrição (linha inferior na figura) e o cursor indicará o erro no texto do programa. A função DeInit é executada imediatamente antes que o indicador ou o Expert Advisor seja removido do gráfico. Aqui, por exemplo, os elementos gráficos criados podem ser excluídos. Se não houver ações a serem realizadas (a função está vazia) - a função pode ser apagada... Se você tiver algo como string x=125 correto para string x = (string)125

Ao invés de err=StringToInteger(err); err=StringToInteger((string)err); embora alguns possam achar engraçado


ms....

Eu fiz o que você recomenda

coloque a linhaerr=StringToInteger((string)err) na funçãoOpção; sem erro.

Mas o aviso de convocação implícita de corda para número ainda permanece, acho que o terminal terá que ser reinstalado afinal de contas.

 
buyanov: Eu coloquei, como você recomendou, a linhaerr=StringToInteger((string)err) na função OnDeinit; nenhum erro.

Mas o aviso de convocação implícita de fio para número ainda permanece, acho que afinal terei que reinstalar o terminal.

Por favor, poste sua função OnDeinit - Eu a verei. E diga-me o que você quer dele. O MetaEditor dá este erro. Tenha uma cópia da pasta do terminal. Aqui Alexey Viktorov disse como reinstalar rapidamente

Razão: