Tipos de Eventos de Gráficos

Existem 11 tipos de eventos que podem ser processados usando a função pré-definida OnChartEvent(). Para eventos customizados 65535 identificadores são fornecidos na faixa de CHARTEVENT_CUSTOM a CHARTEVENT_CUSTOM_LAST inclusive. Para gerar um evento customizado, a função EventChartCustom() deve ser usada.

ENUM_CHART_EVENT

ID

Descrição

CHARTEVENT_KEYDOWN

Teclada

CHARTEVENT_MOUSE_MOVE

Movimento de mouse, cliques de mouse (se CHART_EVENT_MOUSE_MOVE=true é definido para o gráfico)

CHARTEVENT_MOUSE_WHEEL

Pressionada o rodada a roda do mouse (se definida a propriedade para o gráfico CHART_EVENT_MOUSE_WHEEL=true)

CHARTEVENT_OBJECT_CREATE

Objeto gráfico criado (se CHART_EVENT_OBJECT_CREATE=true é definido para o gráfico)

CHARTEVENT_OBJECT_CHANGE

Propriedade do objeto gráfico alterada via janela de diálogo de propriedades

CHARTEVENT_OBJECT_DELETE

Objeto gráficoexcluído (se CHART_EVENT_OBJECT_DELETE=true é definido para o gráfico)

CHARTEVENT_CLICK

Dar um clique em um gráfico

CHARTEVENT_OBJECT_CLICK

Dar um clique em um objeto gráfico

CHARTEVENT_OBJECT_DRAG

Arrastar e soltar um objeto gráfico

CHARTEVENT_OBJECT_ENDEDIT

Fim de edição de texto no objeto gráfico Edit

CHARTEVENT_CHART_CHANGE

Alteração do tamanho do gráfico ou modificação das propriedades do gráfico através da janela de Propriedades

CHARTEVENT_CUSTOM

O número inicial de um evento de uma faixa de eventos customizados

CHARTEVENT_CUSTOM_LAST

O número final de um evento de uma faixa de eventos customizados

Para cada tipo de evento, os parâmetros de entrada da função OnChartEvent() têm valores definidos que são requeridos para o processamento deste evento. Os eventos e valores passados através destes parâmetros são listados na tabela abaixo.

Evento

Valor do parâmetro id

Valor do parâmetro lparam

Valor do parâmetro dparam

Valor do parâmetro sparam

Evento de uma teclada

CHARTEVENT_KEYDOWN

código de uma tecla pressionada

Repita a contagem (o número de vezes que a tecla é repetida como um resultado de que o usuário pressiona a tecla)

O valor da string de uma pequena máscara de descrever o estado de botões do teclado

Eventos de mouse(se CHART_EVENT_MOUSE_MOVE=true é definido para o gráfico)

CHARTEVENT_MOUSE_MOVE

a coordenada X

a coordenada Y

O valor de string de uma máscara de bites descrevendo o estado de botões de mouse

Evento da roda do mouse (se, para o gráfico, definida a propriedade CHART_EVENT_MOUSE_WHEEL=true)

CHARTEVENT_MOUSE_WHEEL

Sinalizadores de estados de teclas e botões do mouse, coordenadas X e Y do mouse. A descrição é feita no exemplo abaixo

Valor Delta de rolagem de roda de mouse

Evento de criação de objeto gráfico(se CHART_EVENT_OBJECT_CREATE=true é definido para o gráfico)

CHARTEVENT_OBJECT_CREATE

Nome do objeto gráfico criado

Evento de mudança de uma propriedade de objeto via janela de diálogo de propriedades

CHARTEVENT_OBJECT_CHANGE

Nome do objeto gráfico modificado

Evento de exclusão de objeto gráfico (se CHART_EVENT_OBJECT_DELETE=true está definido para o gráfico)

CHARTEVENT_OBJECT_DELETE

Nome do objeto gráfico excluído

Evento de um click de mouse no gráfico

CHARTEVENT_CLICK

a coordenada X

a coordenada Y

Evento de um click de mouse num objeto gráfico pertencente ao gráfico

CHARTEVENT_OBJECT_CLICK

a coordenada X

a coordenada Y

Nome do objeto gráfico, na qual o evento ocorreu

Evento de um objeto gráfico arrastado usando o mouse

CHARTEVENT_OBJECT_DRAG

Nome do objeto gráfico movido

Evento da edição de texto finalizada na caixa de entrada do objeto gráfico LabelEdit

CHARTEVENT_OBJECT_ENDEDIT

Nome do objeto gráfico LabelEdit, cuja edição de texto foi concluída

Evento de alteração do tamanho do gráfico ou modificação das propriedades do gráfico através da janela de Propriedades

CHARTEVENT_CHART_CHANGE

ID do evento de usuário sob N número

CHARTEVENT_CUSTOM+N

Valor definido pela função EventChartCustom()

Valor definido pela função EventChartCustom()

Valor definido pela função EventChartCustom()

Exemplo:

#define KEY_NUMPAD_5       12
#define KEY_LEFT           37
#define KEY_UP             38
#define KEY_RIGHT          39
#define KEY_DOWN           40
#define KEY_NUMLOCK_DOWN   98
#define KEY_NUMLOCK_LEFT  100
#define KEY_NUMLOCK_5     101
#define KEY_NUMLOCK_RIGHT 102
#define KEY_NUMLOCK_UP    104
//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("O expert com nome ",MQL5InfoString(MQL5_PROGRAM_NAME)," está executando");
//--- Ativar eventos de criação de objetos
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- Ativar eventos de exclusão de objetos
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- A atualização forçada das propriedades do gráfico garante a prontidão para o processamento de eventos
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Funções ChartEvent                                               |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // Identificador de evento
                  const long& lparam,   // Parâmetro de evento de tipo long
                  const double& dparam, // Parâmetro de evento de tipo double
                  const string& sparam  // Parâmetro de evento de tipo string
                  )
  {
//--- o botão esquerdo do mouse foi pressionado no gráfico
   if(id==CHARTEVENT_CLICK)
     {
      Print("As coordenadas do clique do mouse sobre o gráfico são: x = ",lparam,"  y = ",dparam);
     }
//--- o mouse foi clicado sobre o objeto gráfico
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("O mouse foi clicado sobre o objeto com o nome '"+sparam+"'");
     }
//--- a tecla foi pressionada
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("O KEY_NUMLOCK_LEFT foi pressionado");   break;
         case KEY_LEFT:          Print("O KEY_LEFT foi pressionado");           break;
         case KEY_NUMLOCK_UP:    Print("O KEY_NUMLOCK_UP foi pressionado");     break;
         case KEY_UP:            Print("O KEY_UP foi pressionado");             break;
         case KEY_NUMLOCK_RIGHT: Print("O KEY_NUMLOCK_RIGHT foi pressionado");  break;
         case KEY_RIGHT:         Print("O KEY_RIGHT foi pressionado");          break;
         case KEY_NUMLOCK_DOWN:  Print("O KEY_NUMLOCK_DOWN foi pressionado");   break;
         case KEY_DOWN:          Print("O KEY_DOWN foi pressionado");           break;
         case KEY_NUMPAD_5:      Print("O KEY_NUMPAD_5 foi pressionado");       break;
         case KEY_NUMLOCK_5:     Print("O KEY_NUMLOCK_5 foi pressionado");      break;
         default:                Print("Algumas teclas não listadas foram pressionadas");
        }
      ChartRedraw();
     }
//--- o objeto foi excluído
   if(id==CHARTEVENT_OBJECT_DELETE)
     {
      Print("O objeto com o nome ",sparam," foi excluído");
     }
//--- o objeto foi criado
   if(id==CHARTEVENT_OBJECT_CREATE)
     {
      Print("O objeto com o nome ",sparam," foi criado");
     }
//--- o objeto foi movido ou suas coordenadas de ponto de ancoragem foram alteradas
   if(id==CHARTEVENT_OBJECT_DRAG)
     {
      Print("O ponto de ancoragem das coordenadas do objeto com o nome ",sparam," foi alterado");
     }
//--- o texto na Edição do objeto foi alterado
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
     {
      Print("O texto no campo da Edição do objeto com o nome ",sparam," foi alterado");
     }
  }

Para o evento CHARTEVENT_MOUSE_MOVE, o parâmetro string sparam Contém informações sobre o estado do teclado e botões do mouse:

Bit

Descrição

1

Estado do botão esquerdo do mouse

2

Estado do botão direito do mouse

3

Estado do botão SHIFT

4

Estado do botão CTRL

5

Estado do botão do meio do mouse

6

Estado do primeiro botão extra do mouse

7

Estado do segundo botão extra do mouse

Exemplo:

//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- habilitar mensagens do CHART_EVENT_MOUSE_MOVE
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
//--- a atualização forçada das propriedades do gráfico garante a prontidão para o processamento de eventos
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| MouseState                                                       |
//+------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // mouse esquerdo
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // mouse direito
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // mouse do meio
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // mouse primeiro X key
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // mouse segundo X key
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // shift key
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // control key
   return(res);
  }
//+------------------------------------------------------------------+
//| Funções ChartEvent                                               |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_MOUSE_MOVE)
      Comment("POINT: ",(int)lparam,",",(int)dparam,"\n",MouseState((uint)sparam));
  }

Para o evento CHARTEVENT_MOUSE_WHEEL, os parâmetros lparam e dparam contêm informações sobre o estado da tecla Ctrl, Shift, dos botões do mouse, coordenadas da cursor e dimensão da rolagem da roda do mouse. Para entender melhor o funcionamento deste Expert Advisor no gráfico, role a roda do mouse pressionando os diversos botões e teclas descritos no código.

Exemplo de processamento de evento CHARTEVENT_MOUSE_WHEEL:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
init OnInit()
  {
//--- ativação da mensagem de rolagem de roda do mouse
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- a atualização forçada das propriedades do gráfico garante a prontidão para o processamento de eventos
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)
  {
   if(id==CHARTEVENT_MOUSE_WHEEL)
     {
      //--- analisemos o estado dos botões e da roda do mouse para este evento
      int flg_keys = (int)(lparam>>32);          // sinalizador de estado de teclas Ctrl, Shift e de botões do mouse
      int x_cursor = (int)(short)lparam;         // coordenada X, em que acontece o evento da roda do mouse
      int y_cursor = (int)(short)(lparam>>16);   // coordenada Y, em que acontece o evento de roda do mouse
      int delta    = (int)dparam;                // valor total de rolagem da roda, é ativado ao alcançar +120 ou -120
      //--- processamos o sinalizador 
      string str_keys="";
      if((flg_keys&0x0001)!=0) str_keys+="LMOUSE ";
      if((flg_keys&0x0002)!=0) str_keys+="RMOUSE ";
      if((flg_keys&0x0004)!=0) str_keys+="SHIFT ";
      if((flg_keys&0x0008)!=0) str_keys+="CTRL ";
      if((flg_keys&0x0010)!=0) str_keys+="MMOUSE ";
      if((flg_keys&0x0020)!=0) str_keys+="X1MOUSE ";
      if((flg_keys&0x0040)!=0) str_keys+="X2MOUSE ";
      
      if(str_keys!="")
         str_keys=", keys='"+StringSubstr(str_keys,0,StringLen(str_keys)-1) + "'";
      PrintFormat("%s: X=%d, Y=%d, delta=%d%s",EnumToString(CHARTEVENT_MOUSE_WHEEL),x_cursor,y_cursor,delta,str_keys);
     }
  }
//+------------------------------------------------------------------+ /*
   Exemplo de saída
   CHARTEVENT_MOUSE_WHEEL: Ctrl pressed: X=193, Y=445, delta=-120
   CHARTEVENT_MOUSE_WHEEL: Shift pressed: X=186, Y=446, delta=120
   CHARTEVENT_MOUSE_WHEEL:  X=178, Y=447, delta=-120
   CHARTEVENT_MOUSE_WHEEL:  X=231, Y=449, delta=120
   CHARTEVENT_MOUSE_WHEEL: MiddleButton pressed: X=231, Y=449, delta=120
   CHARTEVENT_MOUSE_WHEEL: LeftButton pressed: X=279, Y=320, delta=-120
   CHARTEVENT_MOUSE_WHEEL: RightButton pressed: X=253, Y=330, delta=120  */

Veja Também

Funções de Manipulação de Evento, Trabalhando com eventos