EventChartCustom

La funzione genera un evento personalizzato per il grafico specificato.

bool  EventChartCustom(
   long    chart_id,            // identificatore dell'evento ricezione grafico
   ushort  custom_event_id,     // identificatore evento
   long    lparam,              // parametro di tipo long
   double  dparam,              // parametro di tipo double
   string  sparam               // parametro di tipo stringa
   );

Parametri

chart_id

[in] Identificatore del grafico. 0 significa il grafico corrente.

custom_event_id

[in] ID dell'evento utente. Questo identificatore viene automaticamente aggiunto al valore CHARTEVENT_CUSTOM e convertito nel tipo intero.

lparam

[in] Il parametro di evento del tipo long passato alla funzione OnChartEvent.

dparam

[in] Il parametro di evento del tipo double passato alla funzione OnChartEvent.

sparam

[in] Il parametro di evento di tipo stringa passato alla funzione OnChartEvent. Se la stringa è più lunga di 63 caratteri, viene troncata.

Valore restituito

Restituisce true se un evento personalizzato è stato inserito con successo nella coda eventi del grafico che riceve gli eventi. In caso di fallimento, restituisce false. Utilizzare GetLastError() per ottenere un codice di errore.

Nota

Un Expert Advisor o indicatore attaccato al grafico specificato gestisce l'evento utilizzando la funzione OnChartEvent(int event_id, long& lparam, double& dparam, string& sparam).

Per ciascun tipo di evento, i parametri di input della funzione OnChartEvent() hanno valori definiti che sono necessari per l'elaborazione di questo evento. Gli eventi ed i valori passati attraverso questi parametri sono elencati nella tabella seguente.

Evento

Valore del parametro id

Valore del parametro lparam

Valore del parametro dparam

Valore del parametro sparam

Evento di una sequenza di tasti

CHARTEVENT_KEYDOWN

codice di un tasto premuto

Ripete in conteggio (il numero di volte che il tasto viene ripetuto come risultato dell'utente che tiene premuto il tasto)

Il valore di stringa di una maschera di bit che descrive lo status dei pulsanti della tastiera

Evento mouse (se proprietà CHART_EVENT_MOUSE_MOVE=true viene impostato per il grafico)

CHARTEVENT_MOUSE_MOVE

la coordinata X

la coordinata Y

Il valore di stringa di una maschera di bit che descrive lo stato dei pulsanti del mouse

Evento di creazione di oggetti grafici (Se CHART_EVENT_OBJECT_CREATE=true è impostato per il grafico)

CHARTEVENT_OBJECT_CREATE

Nome dell'oggetto grafico creato

Evento di cambiamento di proprietà di un oggetto attraverso la finestra delle proprietà

CHARTEVENT_OBJECT_CHANGE

Nome dell'oggetto grafico modificato

Evento di eliminazione oggetto grafico (se CHART_EVENT_OBJECT_DELETE= true è impostato per il grafico)

CHARTEVENT_OBJECT_DELETE

Nome dell'oggetto grafico eliminato

Evento di un click del mouse sul grafico

CHARTEVENT_CLICK

la coordinata X

la coordinata Y

Evento di un clic del mouse in un oggetto grafico appartenente alla tabella

CHARTEVENT_OBJECT_CLICK

la coordinata X

la coordinata Y

Nome dell'oggetto grafico, in cui l'evento si è verificato

Evento di trascinamento di un oggetto grafico con il mouse

CHARTEVENT_OBJECT_DRAG

Nome dell'oggetto grafico spostato

Evento del testo finito di modifica nella casella di immissione dell'oggetto grafico LabelEdit

CHARTEVENT_OBJECT_ENDEDIT

Nome dell' oggetto grafico LabelEdit, in cui la modifica del testo è stata completata

Evento di modifiche in un grafico

CHARTEVENT_CHART_CHANGE

ID dell'evento dell'utente con il numero N

CHARTEVENT_CUSTOM+N

Valore impostato dalla funzione EventChartCustom()

Valore impostato dalla funzione EventChartCustom()

Valore impostato dalla funzione EventChartCustom()

Esempio:

//+--------------------------------------------------------------------------------+
//|                                                          ButtonClickExpert.mq5 |
//|                                      Copyright 2009, MetaQuotes Software Corp. | 
//|                                                           https://www.mql5.com |
//+--------------------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
string buttonID="Button";
string labelID="Info";
int broadcastEventID=5000;
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione dell' Expert                                      |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- Crea un bottone per inviare gli eventi personalizzati
   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,"Button");
   ObjectSetInteger(0,buttonID,OBJPROP_FONTSIZE,10);
   ObjectSetInteger(0,buttonID,OBJPROP_SELECTABLE,0);
 
//--- Crea un'etichetta per visualizzare le informazioni
   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,"No information");
   ObjectSetInteger(0,labelID,OBJPROP_FONTSIZE,20);
   ObjectSetInteger(0,labelID,OBJPROP_SELECTABLE,0);
 
//---
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| Funzione deinizializzazione Expert                                             |
//+--------------------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,buttonID);
   ObjectDelete(0,labelID);
  }
//+--------------------------------------------------------------------------------+
//| Funzione tick dell'Expert                                                      |
//+--------------------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+--------------------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//--- Controlla l'evento premendo un pulsante del mouse
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      string clickedChartObject=sparam;
      //--- Se si fa clic sull'oggetto con il nome buttonID
      if(clickedChartObject==buttonID)
        {
         //--- Stato del tasto - premuto o no
         bool selected=ObjectGetInteger(0,buttonID,OBJPROP_STATE);
         //--- registra un messaggio di debug
         Print("Bottone premuto = ",selected);
         int customEventID; // Numero di evento custom da inviare
         string message;    // Messaggio da inviare nell'evento
         //--- Se il tasto viene premuto
         if(selected)
           {
            message="Tasto premuto";
            customEventID=CHARTEVENT_CUSTOM+1;
           }
         else // Il tasto non è premuto
           {
            message="Il tasto non è premuto";
            customEventID=CHARTEVENT_CUSTOM+999;
           }
         //--- Invia un evento custom al "nostro" grafico
         EventChartCustom(0,customEventID-CHARTEVENT_CUSTOM,0,0,message);
         ///--- Invia un messaggio per aprire tutti i charts
         BroadcastEvent(ChartID(),0,"Broadcast Message");
         //--- Messaggio di debug
         Print("Invia un evento con ID = ",customEventID);
        }
      ChartRedraw();// Ridisegno forzato di tutti gli oggetti del grafico
     }
 
//--- Controlla l'evento che riguarda gli eventi utente
   if(id>CHARTEVENT_CUSTOM)
     {
      if(id==broadcastEventID)
        {
         Print("Ottiene il messaggio trasmesso da una tabella con id = "+lparam);
        }
      else
        {
         //--- Leggiamo un messaggio di testo nell'event
         string info=sparam;
         Print("Gestisce l'evento utente con l' ID = ",id);
         //--- Mostra un messaggio nell'etichetta
         ObjectSetString(0,labelID,OBJPROP_TEXT,sparam);
         ChartRedraw();// Ridisegna forzatamente tutti gli oggetti del grafico
        }
     }
  }
//+--------------------------------------------------------------------------------+
//| invia l'evento trasmesso a tutti i grafici aperti                              |
//+--------------------------------------------------------------------------------+
void BroadcastEvent(long lparam,double dparam,string sparam)
  {
   int eventID=broadcastEventID-CHARTEVENT_CUSTOM;
   long currChart=ChartFirst();
   int i=0;
   while(i<CHARTS_MAX)                 // Abbiamo di certo non più di CHARTS_MAX grafici aperti 
     {
      EventChartCustom(currChart,eventID,lparam,dparam,sparam);
      currChart=ChartNext(currChart); // Abbiamo ricevuto un nuovo grafico dal precedente
      if(currChart==-1) break;        // Raggiunta la fine della lista dei grafici
      i++;// Non dimentichiamo di incrementare il contatore
     }
  }
//+--------------------------------------------------------------------------------+

Vedi anche

Eventi del terminale client, Funzioni di gestione degli eventi