Discussão do artigo "Como criar um painel gráfico de qualquer nível de complexidade" - página 13

 

Olá!

Você poderia me explicar por que seu painel funciona bem em um gráfico real, mas não funciona no testador de estratégia?

Ou seja, os eventos de pressionamento de botões, por exemplo, não são processados.

Como posso consertar isso?

Desde já, obrigado!

 
O painel que é melhor usar de outro idioma no mt5 dependerá puramente do terminal e dográfico
 
Vitaliy Davydov testador de estratégia?

Ou seja, os eventos de pressionamento de botões, por exemplo, não são processados.

Como posso corrigir isso?

Desde já, obrigado!

Publiquei uma solução funcional com botões há alguns anos. Mas os campos Editar não funcionam no testador MT5. Embora você possa adicionar pequenos botões +/- ao lado do campo Editar e editar por meio deles. Mas haverá suas próprias nuances.
 
ON_MOUSE_FOCUS_KILL não parece estar sendo usado de forma alguma. Nada acontece quando você o adiciona ao Map. Você também pode comentar ON_MOUSE_FOCUS_KILL e o compilador o ignorará.
 

Olá!

Eu crio um painel herdado do CDialog (ou do CWndContainer, não há diferença).

Se eu criar um painel na janela principal do gráfico, tudo funcionará - o painel é movido com o mouse e fechado com o botão Fechar.

Se eu criar um painel em uma subjanela, nada funcionará: o painel fica imóvel e não reage ao botão Fechar.

Pergunta: como fazer com que o painel reaja normalmente aos eventos do gráfico na subjanela?

 

Olá, consegui criar meu painel com sucesso. Muito obrigado por seu incrível tutorial.

 
Vasiliy Pushkaryov #:
Há alguns anos, publiquei uma solução funcional com botões. Mas os campos Edit não funcionam no testador MT5. Embora você possa adicionar pequenos botões +/- ao lado do campo Editar e editar por meio deles. Mas haverá suas próprias nuances.

Boa tarde!

Obrigado, consegui resolver o problema.

Agora, outros problemas - todos esses painéis da biblioteca padrão,

são absolutamente não-funcionais no testador MT4 no modo de visualização de teste.

Existe alguma solução global para esse problema, para que eu não tenha que dançar com o pandeiro para cada controle?

 
Vitaliy Davydov #:

Boa tarde!

Obrigado, consegui resolver o problema.

Agora outros problemas - todos esses painéis são da biblioteca padrão,

são absolutamente não funcionais no testador MT4 no modo de visualização de teste.

Existe alguma solução global para esse problema, para que eu não tenha que dançar com o pandeiro para cada controle?

O que você quer dizer com não funcional? Em meu testador MT4, eles cumprem suas funções.

Dei um exemplo quando herdei do CButton e adicionei a função cMyButton::isButtonPushed() para trabalhar com o testador.

Fiz o mesmo com CEdit, CCheckBox e sempre uso meus herdeiros. Esse é um trabalho único.

No arquivo TestPush, havia uma função de exemplo checkPushingButtons():

void OnTick()
{
    if(MQLInfoInteger(MQL_VISUAL_MODE)) ExtDialog.checkPushingButttons();
}

//+------------------------------------------------------------------------------------------------------------------+
//| Para o testador e o OnTick. Vamos verificar se o botão (ou objeto) está pressionado
//+------------------------------------------------------------------------------------------------------------------+
void CAppWindowCorrectMinimization::checkPushingButttons()
{
   if(m_button1.isButtonPushed())    print1();
   if(m_button2.isButtonPushed())    print2();
}


Aqui está o meu código de trabalho:

//+------------------------------------------------------------------------------------------------------------------+
//| Para o testador e o OnTick. Vamos verificar se o botão (ou objeto) está pressionado
//+------------------------------------------------------------------------------------------------------------------+
void cInterface::checkPushingButttons()
{
  if(btnOnOff.isButtonPushed())    OnClickOnOff();
  if(btnLong.isButtonPushed())     OnClickLong();
  if(btnShort.isButtonPushed())    OnClickShort();

  if(btnCloseOff.isButtonPushed()) OnClickCloseOff();
  if(btnProtocol.isButtonPushed()) OnClickProtocol();
  if(btnOpposMA6.isButtonPushed()) OnClickOpposMA6();

  if(editMA2plus.isEditChanged())  OnEditMA2plus();
  if(editPunct.isEditChanged())    OnEditPuncture();

Ou seja, no final, a diferença entre trabalhar sem um testador e com um testador se resume a adicionar uma única função checkPushingButttons(), em que adicionamos uma string a cada controle e verificamos, por meio de um tique, se é um push ou um input.

Prepare modelos, faça isso algumas vezes, acho que depois você se acostumará.

 

Olá Vladimir,
Primeiramente, gostaria de agradecer pelo excelente tutorial. Encontrei um problema ao usá-lo em um modelo: Basta colocar qualquer um de seus aplicativos em um modelo de um gráfico vazio. Depois de carregar esse modelo, o aplicativo aparecerá duas vezes, como mostrado na figura. Você tem alguma ideia de como corrigir isso?

Desde já, muito obrigado

Arquivos anexados:
 

Por que o painel/janela não pode ser arrastado/movido além dos limites do gráfico?

Qual é a diferença com a biblioteca easyfastgui de Anatoli?