Типы событий графика
Существуют 9 видов событий, которые можно обрабатывать с помощью функции предопределенной функции OnChartEvent(). Для пользовательских событий предусмотрено 65535 идентификаторов в диапазоне от CHARTEVENT_CUSTOM до CHARTEVENT_CUSTOM_LAST включительно. Для генерации пользовательского события необходимо использовать функцию EventChartCustom().
ENUM_CHART_EVENT
|
|
CHARTEVENT_KEYDOWN
|
Нажатие клавиатуры
|
CHARTEVENT_MOUSE_MOVE
|
Перемещение мыши и нажатие кнопок мыши (если для графика установлено свойство CHART_EVENT_MOUSE_MOVE=true)
|
CHARTEVENT_OBJECT_CREATE
|
Создание графического объекта (если для графика установлено свойство CHART_EVENT_OBJECT_CREATE=true)
|
CHARTEVENT_OBJECT_CHANGE
|
Изменение свойств графического объекта через диалог свойств
|
CHARTEVENT_OBJECT_DELETE
|
Удаление графического объекта (если для графика установлено свойство CHART_EVENT_OBJECT_DELETE=true)
|
CHARTEVENT_CLICK
|
Нажатие мышки на графике
|
CHARTEVENT_OBJECT_CLICK
|
Нажатие мышки на графическом объекте
|
CHARTEVENT_OBJECT_DRAG
|
Перетаскивание графического объекта
|
CHARTEVENT_OBJECT_ENDEDIT
|
Окончание редактирования текста в графическом объекте Edit
|
CHARTEVENT_CHART_CHANGE
|
Изменение размеров графика или изменение свойств графика через диалог свойств
|
CHARTEVENT_CUSTOM
|
Начальный номер события из диапазона пользовательских событий
|
CHARTEVENT_CUSTOM_LAST
|
Конечный номер события из диапазона пользовательских событий
|
Для каждого типа события входные параметры функции OnChartEvent() имеют определенные значения, которые необходимы для обработки этого события. В таблице перечислены события и значения, которые передаются через параметры.
Событие
|
Значение параметра id
|
Значение параметра lparam
|
Значение параметра dparam
|
Значение параметра sparam
|
Событие нажатия клавиатуры
|
CHARTEVENT_KEYDOWN
|
код нажатой клавиши
|
Количество нажатий клавиши,сгенерированных за время её удержания в нажатом состоянии
|
Строковое значение битовой маски, описывающее статус кнопок клавиатуры
|
События мыши (если для графика установлено свойство CHART_EVENT_MOUSE_MOVE=true)
|
CHARTEVENT_MOUSE_MOVE
|
X координата
|
Y координата
|
Строковое значение битовой маски, описывающее статус кнопок мыши
|
Событие создания графического объекта (если для графика установлено свойство CHART_EVENT_OBJECT_CREATE=true)
|
CHARTEVENT_OBJECT_CREATE
|
—
|
—
|
Имя созданного графического объекта
|
Событие изменения свойств объекта через диалог свойств
|
CHARTEVENT_OBJECT_CHANGE
|
—
|
—
|
Имя измененного графического объекта
|
Событие удаления графического объекта (если для графика установлено свойство CHART_EVENT_OBJECT_DELETE=true)
|
CHARTEVENT_OBJECT_DELETE
|
—
|
—
|
Имя удаленного графического объекта
|
Событие щелчка мыши на графике
|
CHARTEVENT_CLICK
|
X координата
|
Y координата
|
—
|
Событие щелчка мыши на графическом объекте
|
CHARTEVENT_OBJECT_CLICK
|
X координата
|
Y координата
|
Имя графического объекта, на котором произошло событие
|
Событие перемещения графического объекта при помощи мыши
|
CHARTEVENT_OBJECT_DRAG
|
—
|
—
|
Имя перемещенного графического объекта
|
Событие окончания редактирования текста в поле ввода графического объекта "Поле ввода"
|
CHARTEVENT_OBJECT_ENDEDIT
|
—
|
—
|
Имя графического объекта "Поле ввода", в котором завершилось редактирование текста
|
Событие изменения размеров графика или изменения свойств графика через диалог свойств
|
CHARTEVENT_CHART_CHANGE
|
—
|
—
|
—
|
Пользовательское событие с номером N
|
CHARTEVENT_CUSTOM+N
|
Значение, заданное функцией EventChartCustom()
|
Значение, заданное функцией EventChartCustom()
|
Значение, заданное функцией EventChartCustom()
|
Пример:
#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("Запущен эксперт с именем ",MQLInfoString(MQL_PROGRAM_NAME));
//--- установка флага получения событий создания объектов графика
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- установка флага получения событий удаления объектов графика
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, // идентификатор события
const long& lparam, // параметр события типа long
const double& dparam, // параметр события типа double
const string& sparam) // параметр события типа string
{
//--- нажатие левой кнопкой мышки на графике
if(id==CHARTEVENT_CLICK)
{
Print("Координаты щелчка мышки на графике: x = ",lparam," y = ",dparam);
}
//--- нажатие мышкой на графическом объекте
if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'");
}
//--- нажатие кнопки на клавиатуре
if(id==CHARTEVENT_KEYDOWN)
{
switch(int(lparam))
{
case KEY_NUMLOCK_LEFT: Print("Нажата KEY_NUMLOCK_LEFT"); break;
case KEY_LEFT: Print("Нажата KEY_LEFT"); break;
case KEY_NUMLOCK_UP: Print("Нажата KEY_NUMLOCK_UP"); break;
case KEY_UP: Print("Нажата KEY_UP"); break;
case KEY_NUMLOCK_RIGHT: Print("Нажата KEY_NUMLOCK_RIGHT"); break;
case KEY_RIGHT: Print("Нажата KEY_RIGHT"); break;
case KEY_NUMLOCK_DOWN: Print("Нажата KEY_NUMLOCK_DOWN"); break;
case KEY_DOWN: Print("Нажата KEY_DOWN"); break;
case KEY_NUMPAD_5: Print("Нажата KEY_NUMPAD_5"); break;
case KEY_NUMLOCK_5: Print("Нажата KEY_NUMLOCK_5"); break;
default: Print("Нажата какая-то неперечисленная клавиша");
}
ChartRedraw();
}
//--- удален объект
if(id==CHARTEVENT_OBJECT_DELETE)
{
Print("Удален объект с именем ",sparam);
}
//--- создан объект
if(id==CHARTEVENT_OBJECT_CREATE)
{
Print("Создан объект с именем ",sparam);
}
//--- перемещен объект или изменены координаты точек привязки
if(id==CHARTEVENT_OBJECT_DRAG)
{
Print("Изменение точек привязки объекта с именем ",sparam);
}
//--- изменен текст в поле ввода графического объекта Edit
if(id==CHARTEVENT_OBJECT_ENDEDIT)
{
Print("Изменен текст в объекте Edit ",sparam);
}
} |
Для события CHARTEVENT_MOUSE_MOVE строковой параметр sparam содержит число, представляющее информацию о состоянии клавиш:
|
|
1
|
Состояние левой клавиши мыши
|
2
|
Состояние правой клавиши мыши
|
3
|
Состояние клавиши SHIFT
|
4
|
Состояние клавиши CTRL
|
5
|
Состояние средней клавиши мыши
|
6
|
Состояние первой дополнительной клавиши мыши
|
7
|
Состояние второй дополнительной клавиши мыши
|
Пример:
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- включение сообщений о перемещении мыши по окну чарта
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
}
//+------------------------------------------------------------------+
//| 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));
} |
Смотри также
|