Discussão do artigo "Como adicionar rapidamente paneis de controle a indicadores e conselheiros (EA)" - página 3

 
Karputov Vladimir:

Usando o arquivo PanelDialog2.mqh do artigo como exemplo:

Esse arquivo cria os elementos para um painel de diálogo. A característica do painel é a classe CDialog.

Obrigado!

Vou tentar com o CDialog agora, mas ainda não entendi como deve funcionar: o botão fica visível imediatamente após a criação, ele deve desaparecer e pular para o CDialog?

 
Evgeny Potapov:

Obrigado!

Vou tentar com o CDialog, mas ainda não entendi como ele deve funcionar: o botão fica visível imediatamente após a criação, ele deve desaparecer e pular para o CDialog?

Use o modo de depuração passo a passo (F11) com pontos de interrupção e tudo o que estiver oculto se tornará visível.
 
Evgeny Potapov:

Obrigado!

Vou tentar com o CDialog, mas ainda não entendi como ele deve funcionar: o botão fica visível imediatamente após a criação, ele deve desaparecer e pular para o CDialog?

Karputov Vladimir:

Sobre o exemplo do arquivo PanelDialog2.mqh do artigo:

Esse arquivo cria elementos para um painel de diálogo. O sinal do painel é a classe CDialog.

Sim, ele funciona com essa classe, mas, por algum motivo, o diálogo não é arrastado com o mouse. Aqui:

int OnInit()  {
   MyButton = new CButton;
   if(CheckPointer(MyButton) == POINTER_INVALID) return(INIT_FAILED);
   MyDialog = new CDialog();
   if(CheckPointer(MyDialog) == POINTER_INVALID) return(INIT_FAILED);
   MyDialog.Create(ChartID(),WindowExpertName()+"_dailog",0,50,100,150,250);
   MyDialog.Add(MyButton);
   MyButton.Create(ChartID(),WindowExpertName()+"_button",0,70,120,90,190);
   MyDialog.Show();
   MyDialog.Enable();
   return(INIT_SUCCEEDED);
}
 
Vladimir Karputov:

Você poderia me dizer como desativar o processamento de todos os eventos ou cliques em botões por algum tempo (por exemplo, durante o tempo de abertura ou fechamento de posições)?
 
Subscribers:
Você poderia me dizer como desativar o processamento de todos os eventos ou cliques em botões por algum tempo (por exemplo, durante o tempo de abertura ou fechamento de posições)?
E mais especificamente? Você tem alguma dúvida sobre os códigos deste artigo?
 
Vladimir Karputov:
E mais importante? Você tem alguma dúvida sobre os códigos deste artigo?

Não necessariamente este artigo... Só não consigo encontrá-los em lugar nenhum. Por exemplo... no artigo, há uma assinatura para o tratamento do evento do botão

EVENT_MAP_BEGIN(CControlsDialog)
...
ON_EVENT(ON_CLICK,m_button_ok,OnClickButtonOK)
EVENT_MAP_END(CAppDialog)

Pergunta: como posso desativar esse processamento programaticamente (desativar o processamento ON_CLICK) e ativá-lo novamente?

 
Subscribers:

Não necessariamente de acordo com este artigo... Eu simplesmente não consigo encontrá-lo em lugar algum. Por exemplo... no artigo, há uma assinatura para o tratamento do evento do botão

EVENT_MAP_BEGIN(CControlsDialog)
...
ON_EVENT(ON_CLICK,m_button_ok,OnClickButtonOK)
EVENT_MAP_END(CAppDialog)

Pergunta: como posso desativar esse processamento programaticamente (desativar o processamento ON_CLICK) e ativá-lo novamente?

Não há como proibi-lo, mas você pode escrever uma verificação de sinalizador na função de processamento de cliques - se o sinalizador for verdadeiro, processamos os cliques e, se o sinalizador for falso, saímos da função.
 
Vladimir Karputov:
Não há como proibir isso, mas você pode escrever uma verificação de sinalizador na função de processamento de cliques - se o sinalizador for verdadeiro - então processamos os cliques, e se o sinalizador for falso - então encerramos a função.
Eu já fiz isso... mas ainda não é a mesma coisa... Por exemplo, quando fecho muitas ordens pressionando um botão no painel, quero que o painel não responda completamente, caso contrário, se eu clicar (nesse momento) no botão de compra, o evento ainda ocorrerá e haverá uma entrada para o manipulador de eventos depois que o fechamento tiver sido realizado.
 
Vladimir Karputov:
Não há como proibir isso, mas você pode escrever uma verificação de sinalizador na função de processamento de cliques: se o sinalizador for verdadeiro, processaremos os cliques e, se o sinalizador for falso, sairemos da função.
Em geral, não há como tornar o painel inativo?
 
Subscribers:
Eu já fiz isso. não é tudo a mesma coisa... Por exemplo, quando fecho muitas ordens pressionando um botão no painel, quero que o painel não responda completamente, caso contrário, se eu clicar (nesse momento) no botão de compra, o evento ainda ocorrerá e haverá uma entrada para o manipulador de eventos depois que o fechamento for acionado.

Faça a coisa certa: processe o sinalizador proibido imediatamente ao entrar na função.

Embora... Só um minuto....

Adicionado:

Não. Você só precisa processar a imprensa dependendo do sinalizador proibido.