Artigo publicado Como criar um painel gráfico de qualquer complexidade e como ele funciona:
Autor: Vladimir Karputov
Obrigado pelo artigo. Muito informativo!
Sim, o artigo é útil, mas não consigo entender como lidar com o evento ON_DBL_CLICK. Você pode me ajudar?
O clique duplo são dois cliques com um intervalo de tempo muito pequeno entre eles. Portanto, ele pode ser tratado da mesma forma que um clique normal - você só precisa adicionar uma variável estática a OnChartEvent. Dê uma olhada no exemplo em https://www.mql5.com/pt/docs/constants/chartconstants/enum_chartevents e faça algo parecido com isto:
//+------------------------------------------------------------------+ //| Função ChartEvent| //+------------------------------------------------------------------+ void OnChartEvent(const int id, // identificador de evento const long& lparam, // parâmetro de evento de tipo longo const double& dparam, // parâmetro de evento do tipo double const string& sparam // parâmetro de evento do tipo string ) { //--- hora do último clique do mouse static uint last_click=0; //--- clicar com o botão esquerdo do mouse no gráfico if(id==CHARTEVENT_CLICK) { uint click_time=GetTickCount(); Print("As coordenadas do clique do mouse no gráfico: x = ",lparam," y = ",dparam); if(click_time-last_click<dbl_click_time) { Print("DoubleClick!"); // quaisquer outras ações } last_click=click_time; } //--- clique do mouse em um objeto gráfico if(id==CHARTEVENT_OBJECT_CLICK) { Print("Pressionar o botão do mouse em um objeto chamado '"+sparam+"'"); } //--- pressionando um botão no teclado if(id==CHARTEVENT_KEYDOWN) { switch(lparam) { case KEY_NUMLOCK_LEFT: Print("KEY_NUMLOCK_LEFT foi pressionada."); break; case KEY_LEFT: Print("KEY_LEFT foi pressionada."); break; case KEY_NUMLOCK_UP: Print("KEY_NUMLOCK_UP foi pressionada."); break; case KEY_UP: Print("KEY_UP pressionada."); break; case KEY_NUMLOCK_RIGHT: Print("KEY_NUMLOCK_RIGHT foi pressionada."); break; case KEY_RIGHT: Print("KEY_RIGHT"); break; case KEY_NUMLOCK_DOWN: Print("KEY_NUMLOCK_DOWN foi pressionada."); break; case KEY_DOWN: Print("KEY_DOWN foi pressionada."); break; case KEY_NUMPAD_5: Print("KEY_NUMPAD_5 foi pressionada."); break; case KEY_NUMLOCK_5: Print("KEY_NUMLOCK_5 foi pressionada."); break; default: Print("Alguma tecla não listada foi pressionada."); } ChartRedraw(); ...... }
- www.mql5.com
Sim, o artigo é útil, mas não consigo entender como lidar com o evento ON_DBL_CLICK. Você pode me ajudar?
Bem, se você tentar fazer tudo da maneira correta, é impossível capturar o evento ON_DBL_CLICK. Um teste simples: eu executo qualquer painel de exemplo da seção Painéis e diálogos, em CWnd::OnMouseUp eu coloco um ponto de interrupção em:

e, como resultado, não importa se você clicar ou clicar duas vezes no painel, o cursor não vai para o ponto de interrupção. É uma chatice.
Bem, se você tentar fazer tudo da maneira correta, é impossível capturar o evento ON_DBL_CLICK. Uma verificação simples: execute qualquer painel de exemplo da seção Painéis e caixas de diálogo e, em CWnd::OnMouseUp, coloque um ponto de interrupção em:
e, como resultado, não importa se você clicar ou clicar duas vezes no painel, o cursor não vai para o ponto de interrupção. Que horror.
A solução foi mostrada em outro tópico https://www.mql5.com/ru/forum/239867#comment_7224345.
- 2018.04.23
- www.mql5.com
Foi publicado o novo artigo Como criar um painel gráfico de qualquer nível de complexidade:
Autor: Vladimir Karputov
Este é um artigo muito bom. Gostei muito dele. Muito bem escrito.
Muito obrigado!
Um artigo maravilhoso para se aproximar desse tópico ou aprofundá-lo.
Infelizmente, isso não muda o fato de que não há um editor de diálogo visual no sistema.
Além disso, o evento do mouse nos diálogos não é interceptado corretamente e o gráfico se move em segundo plano quando o botão do mouse é pressionado.
Além disso, as dicas de ferramentas dos indicadores subjacentes passam pelo diálogo.
Isso ocorre apesar do fato de o código de Doerk ter sido corrigido.
A substituição da biblioteca CWndContainer para o MetaTrader 5 https://www.mql5.com/pt/code/13722
Eu me pergunto como a Metaquotes pode ser tão teimosa a ponto de ignorar isso e não corrigir.
- votos: 24
- 2016.09.01
- Doerk Hilger
- www.mql5.com
Um artigo maravilhoso para se aproximar desse tópico ou aprofundá-lo.
Infelizmente, isso não muda o fato de que falta um editor de diálogo visual no sistema.
Além disso, o evento do mouse nos diálogos não é interceptado corretamente e o gráfico se move em segundo plano quando o botão do mouse é pressionado.
Além disso, as dicas de ferramentas dos indicadores atrás dele passam pelo diálogo.
Isso ocorre apesar do fato de o código de Doerk ter sido corrigido.
A substituição da biblioteca CWndContainer para o MetaTrader 5 https://www.mql5.com/pt/code/13722
Eu me pergunto como a Metaquotes pode ser tão teimosa a ponto de ignorar isso e não corrigir.
Otto, eu entendo o que o está incomodando.
Eu me despedi por causa do excesso de pontos de ajuste na programação gráfica do MT5.
Não sei qual é o conceito que a MQ está buscando, mas acho que eles estão no caminho errado.
Há uma estrutura gráfica especial incorporada em uma janela.
Eles sempre falam sobre segurança, por isso encapsulam o máximo possível.
Basta fornecer uma API para os dados e deixar que os usuários decidam qual linguagem usar. Essa seria a maneira moderna.
Saudações
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Como criar um painel gráfico de qualquer nível de complexidade foi publicado:
O artigo apresenta uma explicação detalhada de como criar um painel com base na classe CAppDialog e como adicionar controles ao painel. Ele fornece a descrição da estrutura do painel e um esquema, que exibe a herança de objetos. Neste artigo, você também aprenderá como os eventos são tratados e como eles são entregues aos controles dependentes. Exemplos adicionais mostram como editar os parâmetros do painel, como o tamanho e a cor do plano de fundo.
Veja como ele funciona: após uma pausa de 5 segundos após a criação do painel, a área do cliente é destruída:
Autor: Vladimir Karputov