photo
+ Responder ao Tópico
Resultados de 1 a 1 de 1

Thread: Tipos de Eventos de Gráficos

  1. #1 Fechar a publicação
    Senior Member jssuser's Avatar jssuser's Avatar
    Data de afiliação
    Aug 2018
    Postagens
    1,503
    Obrigado
    209
    Agradecimentos 1,574 Tempos em 856 Postagens
    AssinarAssinar
    subscritar: 0

    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
    Name:  untitled.png
Views: 74
Size:  57.5 KB

    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.
    Name:  untitled (1).png
Views: 64
Size:  102.3 KB

    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_CREAT E,true);
    //--- Ativar eventos de exclusão de objetos
    ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELET E,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((uin t)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 */

    Though trading on financial markets involves high risk, it can still generate extra income in case you apply the right approach. By choosing a reliable broker such as InstaForex you get access to the international financial markets and open your way towards financial independence. You can sign up here.


  2. The Following User Says Thank You to jssuser For This Useful Post:

    Não registrado (1 )

+ Responder ao Tópico

Permissões de postagens

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts