David, parece haver alguns problemas desse tipo com a build 402. Dê uma olhada aqui e
http://forum.mql4.com/40874/page3. Eu tracei a corrida do EA e há coisas realmente estranhas acontecendo. Primeiro: se, e. com o período de tempo comutado, a função IsStopped () mql4 retorna true. É um fato conhecido (obviamente não documentado) que enquanto IsStopped () = true, chamar qualquer função user32.dll faz com que o MT4 fique travado por alguns segundos. Tudo bem, mas eu registrei que IsStopped () aparentemente permanece verdadeiro depois de uma mudança de TF às vezes (!) Na build 402. Em um caso eu notei que se tornou true e de volta a false por dois segundos, sem fazer nada em lugar algum, sem qualquer razão. Isso é louco. Segundo: O InputResizer altera os atributos da janela de entrada para que o Windows comece a tratá-la como redimensionável. Portanto, as setas aparecem quando você passa as bordas com o ponteiro do mouse, e a janela na verdade redimensiona como estamos acostumados. Mas os controles internos (botões, guias, o formulário) não são reduzidos em seus locais originais:
A razão para isso é que o MT4 chama o DWM (Desktop Window Manager) para plotar e gerenciar a janela e passa seu estilo como não redimensionável. Eu não posso consertar o executável MT4 para alterar este pequeno bit, já que ele é empacotado (protegido contra engenharia reversa do código) com Themida. E eu não sei de nenhuma maneira de dizer ao DWM para fazer o inesperado, já que eu não sou o MT4 - a aplicação que ordenou a janela. Portanto, há apenas um caminho - quando o IR torna a janela redimensionável e aplica as coordenadas do init, ele verifica se a janela foi redimensionada entre ticks (indy) ou sleep interval (EA) e, se sim, todos os elementos internos são movidosdimensionados -by-one, conforme necessário, em relação à nova posiçãotamanho. Agora, se IsStopped () se tornar verdade, o EA terá cca 2 segundos para concluir sua operação. Tudo bem se existem razões para que isso seja verdade; Os motivos legítimos são: chave TF, descolamento EA, alteração de conta, alteração de configurações próprias. Talvez existam outros, mas não consigo imaginar uma razão legítima para IsStopped () se tornar verdadeira enquanto você tem (algumas) janelas de entrada abertas. Mas isso simplesmente acontece. Eu acho que o jeito é causado pelo EA chamando a API do Windows e forçada a ser interrompida pelo MT4 no meio de algo. Claro, posso estar errado. O problema de repintura ausente (sua foto) pode acontecer algumas vezes; é exatamente como você descreve. É um bug inocente e acho que temos que conviver com isso. O conteúdo está correto, apenas não desenhado. Isso é (novamente) causado pelo fato de o DWM não se importar com a nossa janela. Há uma função no código: Código Inserido/Isso faz com que a caixa seja redesenhada, caso contrário, obteremos artefatos InvalidateRect (pWnd, s, true); que cuida de repintar o conteúdo se identificarmos as coordenadas alteradas. Na versão anterior, isso era feito se a largura ou altura fosse alterada, agora nós repintamos, mesmo que apenas arrastados. Eu tentei fazer isso em cada tickpass, mas ele pisca mal. Por enquanto, eu removi todas as referências a IsStopped () no código EA. A desvantagem agora é a lentidão da resposta ao comutar os prazos, mas o EA não deve perder o foco com a API agora. Eu recomendo anexar o EA a um gráfico dedied. Pode residir em qualquer instância em execução no seu PC. Atualize no post # 1, por favor, experimente e me avise. Eu agradeço muito sua ajuda. No entanto, vejo que é realmente sem sentido ter esse hack de janela implementado em (qualquer) formulário mql4 .. Vou codificar esse utilitário como um apliivo nativo Win32, sentado na bandeja do sistema. E eu acho que todos os problemas terão desaparecido. Nunca fiz isso, mas hey, eu preciso aprender
Eu quero codificar minha própria plataforma para testes nos próximos anos. Obrigado a todos que gostaram!