Types des Evènements Graphiques

11 types d'évènements peuvent être traités avec la fonction prédéfinie OnChartEvent(). Pour des évènements personnalisés, 65535 identificateurs sont fournis dans l'intervalle CHARTEVENT_CUSTOM à CHARTEVENT_CUSTOM_LAST inclusive. Pour générer un évènement personnalisé, il faut appeler la fonction EventChartCustom().

ENUM_CHART_EVENT

Identifiant

Description

CHARTEVENT_KEYDOWN

Touches

CHARTEVENT_MOUSE_MOVE

Mouvement et clics de la souris (si CHART_EVENT_MOUSE_MOVE=true est défini pour le graphique)

CHARTEVENT_MOUSE_WHEEL

Pressing or scrolling the mouse wheel (if CHART_EVENT_MOUSE_WHEEL=True for the chart)

CHARTEVENT_OBJECT_CREATE

Objet graphique créé (si CHART_EVENT_OBJECT_CREATE=true est défini pour le graphique)

CHARTEVENT_OBJECT_CHANGE

Changement d'une propriété d'un objet graphique via la boîte de dialogue des propriétés

CHARTEVENT_OBJECT_DELETE

Objet graphique effacé (si CHART_EVENT_OBJECT_DELETE=true est défini pour le graphique)

CHARTEVENT_CLICK

Clic sur un graphique

CHARTEVENT_OBJECT_CLICK

Clic sur un objet graphique

CHARTEVENT_OBJECT_DRAG

Drag and drop d'un objet graphique

CHARTEVENT_OBJECT_ENDEDIT

Fin d'édition du texte dans l'objet graphique Champ d'Edition

CHARTEVENT_CHART_CHANGE

Changement de la taille du graphique ou modification des propriétés du graphique via la boîte de dialogue des propriétés

CHARTEVENT_CUSTOM

Numéro initial d'un évènement dans l'intervalle des évènements personnalisés

CHARTEVENT_CUSTOM_LAST

Le numéro final d'un évènement dans l'intervalle des évènements personnalisés

Pour chaque type d'évènement, les paramètres d'entrée de la fonction OnChartEvent() ont des valeurs définies requises pour le traitement de cet évènement. Les évènements et les valeurs passés via ces paramètres sont listés dans le tableau ci-dessous.

Evènement

Valeur du paramètre id

Valeur du paramètre lparam

Valeur du paramètre dparam

Valeur du paramètre sparam

Evènement suite à un appui sur une touche

CHARTEVENT_KEYDOWN

code de la touche

Nombre de répétitions (le nombre de fois où l'appui sur la touche est réalisé comme étant le résultat de l'appui continu sur la touche)

La valeur de type string du masque de bits décrivant le statut des touches du clavier

Evènements souris (si CHART_EVENT_MOUSE_MOVE=true est défini pour le graphique)

CHARTEVENT_MOUSE_MOVE

la coordonnée X

la coordonnée Y

La valeur de type string du masque de bits décrivant le statut des boutons de la souris

Mouse wheel event (if CHART_EVENT_MOUSE_WHEEL=true for the chart)

CHARTEVENT_MOUSE_WHEEL

Flags of states of keys and mouse buttons, the X and Y coordinates of the mouse pointer. See description in the example below

The Delta value of the mouse wheel scroll

Evènement de création d'un objet graphique (si CHART_EVENT_OBJECT_CREATE=true est défini pour le graphique)

CHARTEVENT_OBJECT_CREATE

Nom de l'objet graphique créé

Evènement de changement de propriété d'un objet via la boîte de dialogue des propriétés

CHARTEVENT_OBJECT_CHANGE

nom de l'objet graphique modifié

Evènement de suppression d'un objet graphique (si CHART_EVENT_OBJECT_DELETE=true est défini pour le graphique)

CHARTEVENT_OBJECT_DELETE

Nom de l'objet graphique supprimé

Evènement de clic de la souris sur le graphique

CHARTEVENT_CLICK

la coordonnée X

la coordonnée Y

Evènement de clic de la souris sur un objet graphique appartenant au graphique

CHARTEVENT_OBJECT_CLICK

la coordonnée X

la coordonnée Y

Nom de l'objet graphique sur lequel l'évènement s'est produit

Evènement de déplacement d'un objet graphique avec la souris

CHARTEVENT_OBJECT_DRAG

Nom de l'objet graphique déplacé

Evènement de fin d'édition du texte dans la zone de saisie d'un objet graphique Champ d'Edition

CHARTEVENT_OBJECT_ENDEDIT

Nom de l'objet graphique Champ d'Edition dans lequel l'édition du texte est terminée

Evènement de changement de la taille du graphique ou modification des propriétés du graphique via la boîte de dialogue des Propriétés

CHARTEVENT_CHART_CHANGE

Identificateur de l'évènement utilisateur sous le numéro N

CHARTEVENT_CUSTOM+N

Valeur définie par la fonction EventChartCustom()

Valeur définie par la fonction EventChartCustom()

Valeur définie par la fonction EventChartCustom()

Exemple :

#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
//+----------------------------------------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert                                                              |
//+----------------------------------------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("L'expert avec le nom ",MQL5InfoString(MQL5_PROGRAM_NAME)," est en cours d'exécution");
//--- active les évènements de création d'objet
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- active les évènements de suppression d'objet
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- la mise à jour forcée des propriétés du graphique assure qu'elles seront prises en compte pour gérer les évènements
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+----------------------------------------------------------------------------------------------------+
//| Fonction ChartEvent                                                                                |
//+----------------------------------------------------------------------------------------------------+
void OnChartEvent(const int id,         // Identificateur de l'évènement  
                  const long& lparam,   // Paramètre de l'évènement de type long
                  const double& dparam, // Paramètre de l'évènement de type double
                  const string& sparam  // Paramètre de l'évènement de type string
                  )
  {
//--- le bouton gauche de la souris a été appuyé sur le graphique
   if(id==CHARTEVENT_CLICK)
     {
      Print("Les coordonnées du clic de la souris sur le graphique sont : x = ",lparam,"  y = ",dparam);
     }
//--- le clic de souris a eu lieu sur l'objet graphique
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("Le clic de souris a eu lieu sur l'objet nommé '"+sparam+"'");
     }
//--- la touche a été pressée
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("La touche KEY_NUMLOCK_LEFT a été pressée");   break;
         case KEY_LEFT:          Print("La touche KEY_LEFT a été pressée");           break;
         case KEY_NUMLOCK_UP:    Print("La touche KEY_NUMLOCK_UP a été pressée");     break;
         case KEY_UP:            Print("La touche KEY_UP a été pressée");             break;
         case KEY_NUMLOCK_RIGHT: Print("La touche KEY_NUMLOCK_RIGHT a été pressée");  break;
         case KEY_RIGHT:         Print("la touche KEY_RIGHT a été pressée");          break;
         case KEY_NUMLOCK_DOWN:  Print("La touche KEY_NUMLOCK_DOWN a été pressée");   break;
         case KEY_DOWN:          Print("La touche KEY_DOWN a été pressée");           break;
         case KEY_NUMPAD_5:      Print("La touche KEY_NUMPAD_5 a été pressée");       break;
         case KEY_NUMLOCK_5:     Print("La touche KEY_NUMLOCK_5 a été pressée");      break;
         default:                Print("Une touche non listée a été pressée");
        }
      ChartRedraw();
     }
//--- l'objet a été supprimé
   if(id==CHARTEVENT_OBJECT_DELETE)
     {
      Print("L'objet avec le nom ",sparam," a été supprimé");
     }
//--- l'objet a été créé
   if(id==CHARTEVENT_OBJECT_CREATE)
     {
      Print("L'objet avec le nom ",sparam," a été créé");
     }
//--- l'objet a été déplacé ou les coordonnées de son point d'ancrage ont été changées
   if(id==CHARTEVENT_OBJECT_DRAG)
     {
      Print("Les coordonnées du point d'ancrage de l'objet ",sparam," ont été changées");
     }
//--- le texte dans la zone d'édition de l'objet a été changé
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
     {
      Print("Le texte dans le champ Zone d'Edition de l'objet ",sparam," a été changé");
     }
  }

Pour l'évènement CHARTEVENT_MOUSE_MOVE le paramètre sparam de type string contient des informations sur l'état des touches du clavier et des boutons de la souris:

Bit

Description

1

Etat du bouton gauche de la souris

2

Etat du bouton droit de la souris

3

Etat de la touche SHIFT

4

Etat de la touche CTRL

5

Etat du bouton du milieu de la souris

6

Etat du premier bouton supplémentaire de la souris

7

Etat du deuxième bouton supplémentaire de la souris

Exemple :

//+----------------------------------------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert                                                              |
//+----------------------------------------------------------------------------------------------------+
void OnInit()
  {
//--- active les messages CHART_EVENT_MOUSE_MOVE
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
// --- désactiver le menu contextuel du graphique (à droite)  
   ChartSetInteger(0,CHART_CONTEXT_MENU,0);     
// --- désactiver le réticule (par le bouton du milieu)
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,0); 
//--- la mise à jour forcée des propriétés du graphique assure qu'elles seront prises en compte pour gérer les évènements
   ChartRedraw();
  }
//+----------------------------------------------------------------------------------------------------+
//| MouseState                                                                                         |
//+----------------------------------------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // souris gauche
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // souris droite
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // souris milieu
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // souris première bouton X
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // souris deuxième bouton X
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // touche shift
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // touche control
   return(res);
  }
//+----------------------------------------------------------------------------------------------------+
//| Fonction 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));
  }

For the CHARTEVENT_MOUSE_WHEEL event, parameters lparam and dparam contain information about the states of the Ctrl and Shift keys, of mouse buttons, cursor coordinates and the mouse wheel scroll value. For a better understanding, run this Expert Advisor on a chart and scroll the mouse wheel, while pressing different buttons and holding down the keys described in the code.

Example of CHARTEVENT_MOUSE_WHEEL event processing:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
init OnInit()
  {
//--- Enabling mouse wheel scrolling messages
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- La mise à jour forcée des propriétés du graphique assure qu'elles seront prises en compte pour gérer les évènements
   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)
     {
      //--- Consider the state of mouse buttons and wheel for this event
      int flg_keys = (int)(lparam>>32);          // The flag of states of the Ctrl and Shift keys, and mouse buttons
      int x_cursor = (int)(short)lparam;         // the X coordinate where the mousse wheel event occurred
      int y_cursor = (int)(short)(lparam>>16);   // the Y coordinate where the mousse wheel event occurred
      int delta    = (int)dparam;                // the total value of mouse scroll, triggers when +120 or -120 is reached
      //--- Processing the 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);
     }
  }
//+------------------------------------------------------------------+ /*
   Example of the 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  */

Voir aussi

Fonctions de Gestion des Evènements, Travailler avec les évènements