Tipi di Eventi del Grafico

Ci sono 11 tipi di eventi che possono essere elaborati utilizzando la funzione predefinita OnChartEvent(). Per gli eventi personalizzati vengono forniti 65535 identificatori nella gamma di CHARTEVENT_CUSTOM fino a CHARTEVENT_CUSTOM_LAST compreso. Per generare un evento personalizzato, deve essere utilizzata la funzione EventChartCustom().

ENUM_CHART_EVENT

ID

Descrizione

CHARTEVENT_KEYDOWN

Tasti

CHARTEVENT_MOUSE_MOVE

Movimento del mouse, clic del mouse (se CHART_EVENT_MOUSE_MOVE=true è impostato per il grafico)

CHARTEVENT_MOUSE_WHEEL

Pressione o scorrimento della rotellina del mouse (se CHART_EVENT_MOUSE_WHEEL=True per il chart)

CHARTEVENT_OBJECT_CREATE

Oggetto grafico creato (se CHART_EVENT_OBJECT_CREATE=true è impostato per il chart)

CHARTEVENT_OBJECT_CHANGE

Oggetto grafico proprietà modificata tramite la finestra delle proprietà

CHARTEVENT_OBJECT_DELETE

Oggetto grafico eliminato (se CHART_EVENT_OBJECT_DELETE=true è impostato per il chart)

CHARTEVENT_CLICK

Facendo clic su un chart

CHARTEVENT_OBJECT_CLICK

Facendo clic su un oggetto grafico

CHARTEVENT_OBJECT_DRAG

Drag and drop di un oggetto grafico

CHARTEVENT_OBJECT_ENDEDIT

Fine di modifica del testo nella modifica degli oggetti grafici

CHARTEVENT_CHART_CHANGE

Modifica della grandezza del grafico o modifica delle proprietà del grafico tramite la finestra delle Proprietà

CHARTEVENT_CUSTOM

Numero iniziale di un evento da una serie di eventi personalizzati

CHARTEVENT_CUSTOM_LAST

Il numero finale di un evento di una serie di eventi personalizzati

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

Eventi del mouse (se CHART_EVENT_MOUSE_MOVE=true è 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 rotellina del mouse (se CHART_EVENT_MOUSE_WHEEL=true per il chart)

CHARTEVENT_MOUSE_WHEEL

Flag di status di tasti e pulsanti del mouse, le coordinate X e Y del puntatore del mouse. Vedere la descrizione nell' esempio sotto

Il valore Delta della rotellina 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 chart

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 di fine modifica del testo 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 cambiamento della grandezza del chart o modifica delle proprietà del chart tramite la finestra delle Proprietà

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:

#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
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione dell' Expert                                      |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("L'expert con nome ",MQL5InfoString(MQL5_PROGRAM_NAME)," sta girando");
//--- abilita gli eventi di creazione degli oggetti
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- abilita gli eventi di eliminazione degli oggetti
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- l'aggiornamento forzato delle proprietà del chart garantisce la preparazione per l'elaborazione degli eventi
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| ChartEvent function                                                            |
//+--------------------------------------------------------------------------------+
void OnChartEvent(const int id,         // Identificatore eventi 
                  const long& lparam,   // Parametro evento di tipo long
                  const double& dparam, // Parametro evento di tipo double
                  const string& sparam  // Parametro evento di tipo stringa
                  )
  {
//--- il bottone sinistro del mouse è stato premuto sul chart
   if(id==CHARTEVENT_CLICK)
     {
      Print("Le coordinate del click del mouse sul chart sono: x = ",lparam,"  y = ",dparam);
     }
//--- il mouse è stato cliccatto sull'oggetto grafico
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Il mouse è stato cliccato sull'oggetto con nome'"+sparam+"'");
     }
//--- il tasto è stato premuto
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("E' stato premuto KEY_NUMLOCK_LEFT");   break;
         case KEY_LEFT:          Print("E' stato premuto KEY_LEFT");           break;
         case KEY_NUMLOCK_UP:    Print("E' stato premuto KEY_NUMLOCK_UP");     break;
         case KEY_UP:            Print("E' stato premuto il tasto KEY_UP");             break;
         case KEY_NUMLOCK_RIGHT: Print("E' stato premuto il tasto KEY_NUMLOCK_RIGHT");  break;
         case KEY_RIGHT:         Print("E' stato premuto il tasto KEY_RIGHT");          break;
         case KEY_NUMLOCK_DOWN:  Print("E' stato premuto il tasto KEY_NUMLOCK_DOWN");   break;
         case KEY_DOWN:          Print("E' stato premuto il tasto KEY_DOWN");           break;
         case KEY_NUMPAD_5:      Print("E' stato premuto il tasto KEY_NUMPAD_5");       break;
         case KEY_NUMLOCK_5:     Print("E' stato premuto il tasto KEY_NUMLOCK_5 ");      break;
         default:                Print("Alcuni tasti non elencati sono stati premuti");
        }
      ChartRedraw();
     }
//--- l'oggetto è stato eliminato
   if(id==CHARTEVENT_OBJECT_DELETE)
     {
      Print("L'oggetto con nome ",sparam," è stato premuto");
     }
//--- L'oggetto è stato creato
   if(id==CHARTEVENT_OBJECT_CREATE)
     {
      Print("L'oggetto con nome ",sparam," è stato creato");
     }
//--- l'oggetto è stato mosso o le sue coordinate dei punti di ancoraggio sono state cambiate
   if(id==CHARTEVENT_OBJECT_DRAG)
     {
      Print("Le coordinate dei punti di ancoraggio dell'oggetto con nome ",sparam," sono state cambiate");
     }
//--- il testo nell'Edit dell'oggetto è stato cambiato
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
     {
      Print("Il testo nel campo Edit dell'oggetto con nome ",sparam," è stato cambiato");
     }
  }

Per l'evento CHARTEVENT_MOUSE_MOVE il parametro stringa @param contiene informazioni sullo stato della tastiera e dei pulsanti del mouse:

Bit

Descrizione

1

Stato del tasto sinistro del mouse

2

Stato del tasto destro del mouse

3

Stato del pulsante SHIFT

4

Stato del pulsante CTRL

5

Stato del pulsante centrale del mouse

6

Stato del primo pulsante del mouse in più

7

Stato del secondo tasto del mouse in più

Esempio:

//+------------------------------------------------------------------+
//| Funzione di inizializzazione Expert                              |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- abilita messaggi CHART_EVENT_MOUSE_MOVE
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
// --- disabilita il menu contestuale del grafico (a destra)
   ChartSetInteger(0,CHART_CONTEXT_MENU,0);     
// --- disabilita il mirino (tramite il pulsante centrale)    
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,0); 
//--- l'aggiornamento forzato delle proprietà del chart garantisce la preparazione per l'elaborazione degli eventi
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| MouseState                                                       |
//+------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // mouse sinistra
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // mouse destra 
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // mouse centro
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // mouse primo tasto X
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // mouse secondo tasto X
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // tasto shift
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // tasto control
   return(res);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
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));
  }

Per l'evento CHARTEVENT_MOUSE_WHEEL, i parametri lParam e dparam contengono informazioni sugli stati dei tasti Ctrl e Shift, dei pulsanti del mouse, delle coordinate del cursore e del valore di scorrimento della rotellina del mouse. Per una migliore comprensione, esegui questo Expert Advisor su un chart e scorri la rotellina del mouse, mentre premi diversi bottoni e tieni premuti i tasti descritti nel codice.

Esempio diCHARTEVENT_MOUSE_WHEEL event processing:

//+------------------------------------------------------------------+
//| Funzione di inizializzazione Expert                              |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- Abilitazione dei messaggi di scorrimento della rotellina del mouse
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- L'aggiornamento forzato delle proprietà del chart garantisce la preparazione per l'elaborazione degli eventi
   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)
     {
      //--- Considera lo stato dei pulsanti e della rotella del mouse per questo evento
      int flg_keys = (int)(lparam>>32);          // La flag degli stati dei tasti Ctrl e Shift e dei pulsanti del mouse
      int x_cursor = (int)(short)lparam;         // la coordinata X dove si è verificato l'evento della rotella del mouse
      int y_cursor = (int)(short)(lparam>>16);   // la coordinata Y dove si è verificato l'evento del mouse
      int delta    = (int)dparam;                // il valore totale dello scroll del mouse, si innesca quando viene raggiunto +120 o -120
      //--- Elaborazione della flag
      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);
     }
  }
//+------------------------------------------------------------------+ /*
   Esempio di output
   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  */

Vedi anche

Funzioni Event Handling, Operazioni con gli eventi