Typen der Chartereignisse

Es gibt 11 Typen der Ereignisse, die durch die vorbestimmte Funktion OnChartEvent() bearbeitet werden können. Für Benutzerereignisse werden 65535 Identifikatoren im Bereich von  CHARTEVENT_CUSTOM bis CHARTEVENT_CUSTOM_LAST vorausgesehen. Für Generieren des Benutzerereignisses muss man die Funktion EventChartCustom() verwenden.

ENUM_CHART_EVENT

Identifikator

Beschreibung

CHARTEVENT_KEYDOWN

Tasten

CHARTEVENT_MOUSE_MOVE

Das Bewegen der Maus und Mausklicks (wenn die Eigenschaft CHART_EVENT_MOUSE_MOVE=true ist für den Chart eingegeben)

CHARTEVENT_MOUSE_WHEEL

Drücken oder Scrollen des Mausrads (wenn die Eigenschaft CHART_EVENT_MOUSE_WHEEL=true für den Chart gesetzt wurde)

CHARTEVENT_OBJECT_CREATE

Erzeugung vom graphischen Objekt (wenn die Eigenschaft CHART_EVENT_OBJECT_CREATE=true ist für den Chart eingegeben)

CHARTEVENT_OBJECT_CHANGE

Veranderung der Objekteigenschaften durch Dialog der Eigenschaften

CHARTEVENT_OBJECT_DELETE

Entfernung vom graphischen Objekt (wenn die Eigenschaft CHART_EVENT_OBJECT_DELETE=true ist für den Chart eingegeben)

CHARTEVENT_OBJECT_CLICK

Betaetigen der Taste mit der Maus auf dem graphischen Objekt

CHARTEVENT_OBJECT_DRAG

Ziehen des graphischen Objektes

CHARTEVENT_OBJECT_ENDEDIT

Beenden von Texteditieren im graphischen Objekt Edit

CHARTEVENT_CHART_CHANGE

Ereignis der Veränderung der Chart-Größe oder Veränderung der Chart-Eigenschaften durch Dialog von Eigenschaften

CHARTEVENT_CUSTOM

Anfangsnummer des Ereignisses vom Bereich der Benutzerereignisse

CHARTEVENT_CUSTOM_LAST

Endnummer des Ereignisses vom Bereich der Benutzerereignisse.

Für jeden Typ des Ereignisses haben Eingabeparameter der Funktion OnChartEvent() vorbestimmte Werte, die für Verarbeitung dieses Ereignisses notwendig sind. In der Tabelle sind Ereignisse und Werte aufgezählt, die durch Parameter übertragen werden.

Ereignis

Wet des Parameters id

Wert des Parameters lparam

Wert des Parameters dparam

Wert des Parameters  sparam

Ereignis des Keyboard Klickens

CHARTEVENT_KEYDOWN

Kode der betätigten Taste

Die Anzahl der Tastenanschläge, die generiert werden, während diese Taste in gedrücktem Zustand war

Der String-Wert eines Bit-Maske, die den Status der Tastatur-Tasten beschreibt

Mausereignisse (wenn die Eigenschaft CHART_EVENT_MOUSE_MOVE=true ist für den Chart eingegeben)

CHARTEVENT_MOUSE_MOVE

X-Koordinate

Y-Koordinate

Der String-Wert einer Bit-Maske, die den Status der Maustasten beschreibt

Das Ereignis des Mausrads (wenn die Eigenschaft CHART_EVENT_MOUSE_WHEEL=true für den Chart gesetzt wurde)

CHARTEVENT_MOUSE_WHEEL

Flags des Status der Tasten und Knöpfe der Maus, X- und Y-Koordinaten des Cursors. Die Beschreibung ist im Beispiel unten zu finden

Der Wert Delta des Scrollens des Mausrads

Ereignis der Erzeugung des graphischen Objektes (wenn die Eigenschaft CHART_EVENT_OBJECT_CREATE=true ist für den Chart eingegeben)

CHARTEVENT_OBJECT_CREATE

Name des erzeugten graphischen Objektes

Ereignis der Veränderung der Eigenschaften des Objektes durch Dialog der Eigenschaften

CHARTEVENT_OBJECT_CHANGE

Name des veränderten graphischen Objektes

Ereignis der Entfernung des graphischen Objektes (wenn die Eigenschaft CHART_EVENT_OBJECT_DELETE=true ist für den Chart eingegeben)

CHARTEVENT_OBJECT_DELETE

Name des entfernten graphischen Objektes

Ereignis des Mausklicks auf der graphischen Darstellung

CHARTEVENT_CLICK

X-Koordinate

Y-Koordinate

Ereignis des Mausklicks auf dem graphischen Objekt

CHARTEVENT_OBJECT_CLICK

X-Koordinate

Y-Koordinate

Name des graphischen Objektes, auf dem das Ereignis geschehen ist  

Ereignis der Verschiebung des graphischen Objektes per Mausklick

CHARTEVENT_OBJECT_DRAG

Name des verschobenen graphischen Objektes

Ereignis der Beendung des Texteditierens im Eingabefeld des graphischen Objektes "Eingabefeld"

CHARTEVENT_OBJECT_ENDEDIT

Name des graphischen Objektes "Eingabefeld", in dem Editieren des Textes beendet wurde

Ereignis der Veränderung der Chart-Größe oder Veränderung der Chart-Eigenschaften durch Dialog von Eigenschaften

CHARTEVENT_CHART_CHANGE

Benutzerereignis mit  Nummer  N

CHARTEVENT_CUSTOM+N

Wert, vorgegeben durch die Funktion EventChartCustom()

Wert, vorgegeben durch die Funktion EventChartCustom()

Wert, vorgegeben durch die Funktion EventChartCustom()

Beispiel:

#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
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Print("The expert with name ",MQL5InfoString(MQL5_PROGRAM_NAME)," is running");
//--- enable object create events
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- enable object delete events
   ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//--- erzwungene Aktualisierung der Charteigenschaften garantiert die Bereitschaft zur Verarbeitung von Ereignissen
   ChartRedraw();
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // Event identifier  
                  const long& lparam,   // Event parameter of long type
                  const double& dparam, // Event parameter of double type
                  const string& sparam  // Event parameter of string type
                  )
  {
//--- the left mouse button has been pressed on the chart
   if(id==CHARTEVENT_CLICK)
     {
      Print("The coordinates of the mouse click on the chart are: x = ",lparam,"  y = ",dparam);
     }
//--- the mouse has been clicked on the graphic object
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      Print("The mouse has been clicked on the object with name '"+sparam+"'");
     }
//--- the key has been pressed
   if(id==CHARTEVENT_KEYDOWN)
     {
      switch(lparam)
        {
         case KEY_NUMLOCK_LEFT:  Print("The KEY_NUMLOCK_LEFT has been pressed");   break;
         case KEY_LEFT:          Print("The KEY_LEFT has been pressed");           break;
         case KEY_NUMLOCK_UP:    Print("The KEY_NUMLOCK_UP has been pressed");     break;
         case KEY_UP:            Print("The KEY_UP has been pressed");             break;
         case KEY_NUMLOCK_RIGHT: Print("The KEY_NUMLOCK_RIGHT has been pressed");  break;
         case KEY_RIGHT:         Print("The KEY_RIGHT has been pressed");          break;
         case KEY_NUMLOCK_DOWN:  Print("The KEY_NUMLOCK_DOWN has been pressed");   break;
         case KEY_DOWN:          Print("The KEY_DOWN has been pressed");           break;
         case KEY_NUMPAD_5:      Print("The KEY_NUMPAD_5 has been pressed");       break;
         case KEY_NUMLOCK_5:     Print("The KEY_NUMLOCK_5 has been pressed");      break;
         default:                Print("Some not listed key has been pressed");
        }
      ChartRedraw();
     }
//--- the object has been deleted
   if(id==CHARTEVENT_OBJECT_DELETE)
     {
      Print("The object with name ",sparam," has been deleted");
     }
//--- the object has been created
   if(id==CHARTEVENT_OBJECT_CREATE)
     {
      Print("The object with name ",sparam," has been created");
     }
//--- the object has been moved or its anchor point coordinates has been changed
   if(id==CHARTEVENT_OBJECT_DRAG)
     {
      Print("The anchor point coordinates of the object with name ",sparam," has been changed");
     }
//--- the text in the Edit of object has been changed
   if(id==CHARTEVENT_OBJECT_ENDEDIT)
     {
      Print("The text in the Edit field of the object with name ",sparam," has been changed");
     }
  }

Für die Ereignisse CHARTEVENT_MOUSE_MOVE enthält der Stringparameter sparam eine Zahl, die den Zustand der Tasten übergibt:

Bit

Besreibung

1

Der Zustand der linken Maustaste

2

Der Zustand der rechten Maustaste

3

Der Zustand der SHIFT-Taste

4

Der Zustand der CTRL-Taste

5

Der Zustand der mittleren Maustaste

6

Der Zustand der ersten zusätzlichen Maustaste

7

Der Zustand der zweiten zusätzlichen Maustaste

Beispiel:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- aktivieren Berichte über die Bewegung der Maus auf dem Chartfenster
   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
// --- deaktiviere das Kontextmenü des Diagramms (rechts)
   ChartSetInteger(0,CHART_CONTEXT_MENU,0);     
// --- deaktiviere das Fadenkreuz (mit der mittleren Taste)    
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,0); 
//--- erzwungene Aktualisierung der Charteigenschaften garantiert die Bereitschaft zur Verarbeitung von Ereignissen
   ChartRedraw();
  }
//+------------------------------------------------------------------+
//| MouseState                                                       |
//+------------------------------------------------------------------+
string MouseState(uint state)
  {
   string res;
   res+="\nML: "   +(((state& 1)== 1)?"DN":"UP");   // mouse left
   res+="\nMR: "   +(((state& 2)== 2)?"DN":"UP");   // mouse right 
   res+="\nMM: "   +(((state&16)==16)?"DN":"UP");   // mouse middle
   res+="\nMX: "   +(((state&32)==32)?"DN":"UP");   // mouse first X key
   res+="\nMY: "   +(((state&64)==64)?"DN":"UP");   // mouse second X key
   res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // shift key
   res+="\nCTRL: " +(((state& 8)== 8)?"DN":"UP");   // control key
   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));
  }

 

Für das Ereignis CHARTEVENT_MOUSE_WHEEL beinhalten die Parameter lparam und dparam Informationen über den Status der Tasten Ctrl, Shift, Maustasten, Koordinaten des Cursors und den Scrollwert des Mausrads. Für ein besseres Verständnis starten Sie diesen Expert Advisor auf dem Chart und scrollen Sie das Mausrad, während Sie Knöpfe und Tasten drücken, die im Code beschrieben sind.

Ein Beispiel für die Verarbeitung des Ereignisses CHARTEVENT_MOUSE_WHEEL:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
init OnInit()
  {
//--- Aktivieren der Meldungen über das Scrollen des Mausrads
   ChartSetInteger(0,CHART_EVENT_MOUSE_WHEEL,1);
//--- erzwungene Aktualisierung der Charteigenschaften garantiert die Bereitschaft zur Verarbeitung von Ereignissen
   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)
     {
      //--- erläutern wir den Status der Tasten und des Mausrads für dieses Ereignis
      int flg_keys = (int)(lparam>>32);          // Flag des Status der Tasten Ctrl und Shift und der Maustasten
      int x_cursor = (int)(short)lparam;         // X-Koordinate, in welcher das Ereignis des Mausrads eingetreten ist
      int y_cursor = (int)(short)(lparam>>16);   // Y-Koordinate, in welcher das Ereignis des Mausrads eingetreten ist
      int delta    = (int)dparam;                // Gesamtwert des Scrollens des Mausrads; wird beim Erreichen von +120 oder -120 ausgelöst
      //--- Flag verarbeiten 
      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);
     }
  }
//+------------------------------------------------------------------+ /*
   Ausgabebeispiel
   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  */

Sehen Sie auch

Funktionen der Bearbeitung von Ereignissen, Arbeit mit Ereignissen