EventChartCustom

A função gera um evento personalizado para o gráfico especificado.

bool  EventChartCustom(
   long    chart_id,            // identificador do evento recebendo gráfico
   ushort  custom_event_id,     // identificador de evento
   long    lparam,              // parâmetro do tipo long
   double  dparam,              // parâmetro do tipo double
   string  sparam               // parâmetro de string do evento
   );

Parâmetros

chart_id

[in] Identificador gráfico. Significa o gráfico atual.

custom_event_id

[in] ID dos usuários do evento. Este identificador é automaticamente adicionado ao valor CHARTEVENT_CUSTOM e convertido para o tipo integer.

lparam

[in] Evento parâmetro do tipo long passado para a função OnChartEvent.

dparam

[in] Evento parâmetro do tipo double passado para a função OnChartEvent.

sparam

[in] Evento parâmetro do tipo string passado para a função OnChartEvent. Se a string é maior do que 63 caracteres, será truncado.

Valor do Retorno

Retorna verdadeiro se um evento personalizado foi colocada com sucesso na fila do gráfico de eventos que recebe os eventos. Em caso de falha, ele retorna false. Use GetLastError() para obter o código de erro.

Observação

Um Expert Advisor ou o indicador ligado a tabela especificada manipula o evento utilizando a função OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam).

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

Evento do mouse (se a propriedade CHART_EVENT_MOUSE_MOVE=true, então é 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 de criação de objeto gráfico (se CHART_EVENT_OBJECT_CREATE=true, então é 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

Caso de apagamento objeto gráfico (se CHART_EVENT_OBJECT_DELETE=true, então é 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 mudança no gráfico

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:

//+------------------------------------------------------------------+
//|                                            ButtonClickExpert.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
string buttonID="Botão";
string labelID="Informação";
int broadcastEventID=5000;
//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Criar um botão para enviar eventos personalizados
   ObjectCreate(0,buttonID,OBJ_BUTTON,0,100,100);
   ObjectSetInteger(0,buttonID,OBJPROP_COLOR,clrWhite);
   ObjectSetInteger(0,buttonID,OBJPROP_BGCOLOR,clrGray);
   ObjectSetInteger(0,buttonID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,buttonID,OBJPROP_XSIZE,200);
   ObjectSetInteger(0,buttonID,OBJPROP_YSIZE,50);
   ObjectSetString(0,buttonID,OBJPROP_FONT,"Arial");
   ObjectSetString(0,buttonID,OBJPROP_TEXT,"Botão");
   ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
   ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
 
//--- Criar uma etiqueta para exibir informações
   ObjectCreate(0,labelID,OBJ_LABEL,0,100,100);
   ObjectSetInteger(0,labelID,OBJPROP_COLOR,clrRed);
   ObjectSetInteger(0,labelID,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,labelID,OBJPROP_YDISTANCE,50);
   ObjectSetString(0,labelID,OBJPROP_FONT,"Trebuchet MS");
   ObjectSetString(0,labelID,OBJPROP_TEXT,"Não informado");
   ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
   ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);
 
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de Desinicialização do Expert                             |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,buttonID);
   ObjectDelete(0,labelID);
  }
//+------------------------------------------------------------------+
//| Função tick (ponto) de um Expert                                 |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Verifique o evento pressionando um botão do mouse
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      string clickedChartObject=sparam;
      //--- Se você clicar sobre o objeto com o nome buttonID
      if(clickedChartObject==buttonID)
        {
         //--- Estado do botão - pressionado ou não
         bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
         //--- registrar uma mensagem de depuração
         Print("Botão pressionado = ",selected);
         int customEventID; // Número do evento personalizado para enviar
         string message;    // Mensagem a ser enviada no caso
         //--- Se o botão for pressionado
         if(selected)
           {
            message="Botão pressionado";
            customEventID=CHARTEVENT_CUSTOM+1;
           }
         else // Botão não está pressionado
           {
            message="Botão não está pressionado";
            customEventID=CHARTEVENT_CUSTOM+999;
           }
         //--- Enviar um evento personalizado "nosso" gráfico
         EventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
         ///--- Envie uma mensagem para todos os gráficos abertos
         BroadcastEvent(ChartID(),0,"Transmissão de mensagem");
         //--- Depurar mensagem
         Print("Enviar um evento com ID = ",customEventID);
        }
      ChartRedraw();// Redesenho forçado de todos os objetos de gráfico
     }
 
//--- Verificar o evento pertence ao evento de utilizador
   if(id>CHARTEVENT_CUSTOM)
     {
      if(id==broadcastEventID)
        {
         Print("Tem transmissão de mensagem a partir de um gráfico com id = "+lparam);
        }
      else
        {
         //--- Nós lemos uma mensagem de texto no evento
         string info=sparam;
         Print("Manipular o evento do usuário com o ID = ",id);
         //--- Exibe uma mensagem numa etiqueta
         ObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
         ChartRedraw();// Redesenho forçado de todos os objetos de gráfico
        }
     }
  }
//+------------------------------------------------------------------+
//| Enviar evento de transmissão para todos os gráficos abertos      |
//+------------------------------------------------------------------+
void BroadcastEvent(long lparam,double dparam,string sparam)
  {
   int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
   long currChart=ChartFirst();
   int i=0;
   while(i<CHARTS_MAX)                 // Temos, certamente, não mais do que CHARTS_MAX abrindo gráficos
     {
      EventChartCustom(currChart,eventID,lparam,dparam,sparam);
      currChart=ChartNext(currChart); // Recebemos um novo gráfico do anterior
      if(currChart==-1) break;        // Alcançado o final da lista de gráficos
      i++;// Não esqueça de aumentar o contador
     }
  }
//+------------------------------------------------------------------+

Também Veja

Eventos do Terminal Cliente, Funções de Manipulação de Evento