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

 

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

 

Obrigado pelo artigo. Muito informativo!

 
Sim, o artigo é útil, mas não consigo entender como lidar com o evento ON_DBL_CLICK.
 
Andrii Djola:
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();
......
     }
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Существуют 11 видов событий, которые можно обрабатывать с помощью функции предопределенной функции OnChartEvent(). Для пользовательских событий предусмотрено 65535 идентификаторов в диапазоне от CHARTEVENT_CUSTOM до CHARTEVENT_CUSTOM_LAST включительно. Для генерации пользовательского события необходимо использовать функцию EventChartCustom...
 
Andrii Djola:
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.

 
Vladimir Karputov:

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.

Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
Обсуждение статьи "Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient"
  • 2018.04.23
  • www.mql5.com
Опубликована статья Улучшаем работу с Панелями: добавляем прозрачность, меняем цвет фона и наследуемся от CAppDialog/CWndClient: Автор: Vladimir Ka...
 
MetaQuotes Software Corp.:

Foi publicado o novo artigo Como criar um painel gráfico de qualquer nível de complexidade:

Autor: Vladimir Karputov

Ótima introdução! Obrigado a você
 

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.

Die Ersetzung des CWndContainer
Die Ersetzung des CWndContainer
  • votos: 24
  • 2016.09.01
  • Doerk Hilger
  • www.mql5.com
Der echte Autor: Original von MetaQuotes Software Corp. Die Modifizierung von Doerk. Diese Datei ersetzt die originale Datei WndContainer.mqh. Eine neue Funktion und zwei kleine Modifikationen verhindern die Veränderung des Charts beim Druck und bei der Haltung der Maus-Taste innerhalb im Bereichs des Containers, das heißt, beim Druck der...
 
Otto Pauser:

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

 
A classe seria ótima, mas não pode ser usada para aplicativos como está, porque os painéis têm boa aparência somente quando a escala de dpi do Windows está definida como 1.
Portanto, o aplicativo pode ter boa aparência em sua tela, mas não em outras.