2.1.1 图表事件类型-MQL5编程参考文档-峰汇在线
诚信为本
量力而为
当前位置:峰汇在线 > MQL语言 > MQL5编程参考文档 > 正文

2.1.1 图表事件类型

使用预定函数OnChartEvent()能实现9种事件类型,自定义事件65535标识符在CHARTEVENT_CUSTOM 到 CHARTEVENT_CUSTOM_LAST 范围内浮动,为生成自定义事件,可以使用EventChartCustom()函数。
ENUM_CHART_EVENT

ID 说明
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 在图表对象编辑里进行文本末尾编辑
CHARTEVENT_CHART_CHANGE 通过属性对话框改变图表大小或更改图表属性
CHARTEVENT_CUSTOM 事件的首写字符在自定义事件中
CHARTEVENT_CUSTOM_LAST 事件的最后一个字符在自定义事件中

对于每个事件类型,OnChartEvent()函数的输入参数都有固定值,这在此事件处理过程中是必须的,事件和值通过参量传递并列举在如下表格中

事件 ID参量值 参数常量值 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 在文本编辑完成后编辑标签图表对象名称
在N数字下用户使用ID事件 CHARTEVENT_CUSTOM+N EventChartCustom() 函数的值 EventChartCustom() 函数的值 EventChartCustom() 函数的值

示例:

#defineKEY_NUMPAD_5       12
#defineKEY_LEFT           37
#defineKEY_UP             38
#defineKEY_RIGHT          39
#defineKEY_DOWN           40
#defineKEY_NUMLOCK_DOWN   98
#defineKEY_NUMLOCK_LEFT  100
#defineKEY_NUMLOCK_5     101
#defineKEY_NUMLOCK_RIGHT 102
#defineKEY_NUMLOCK_UP    104
//+------------------------------------------------------------------+
//| 专家初始化函数                                                     |
//+------------------------------------------------------------------+
intOnInit()
{
//---
Print("The expert with name ",MQL5InfoString(MQL5_PROGRAM_NAME)," is running");
//--- 启用对象创建事件
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- 启用对象删除事件
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| ChartEvent 函数                                                   |
//+------------------------------------------------------------------+
voidOnChartEvent(constintid,         // 事件标识符
constlong& lparam,   // 事件长整型参量
constdouble& dparam, // 事件双精度型参量
conststring& sparam  // 事件字符串型参量
)
{
//--- 鼠标左键点击图表
if(id==CHARTEVENT_CLICK)
{
Print("The coordinates of the mouse click on the chart are: x = ",lparam,"  y = ",dparam);
}
//--- 鼠标点击图形物件
if(id==CHARTEVENT_OBJECT_CLICK)
{
Print("The mouse has been clicked on the object with name '"+sparam+"'");
}
//--- 按下密钥
if(id==CHARTEVENT_KEYDOWN)
{
switch(lparam)
{
caseKEY_NUMLOCK_LEFT:  Print("The KEY_NUMLOCK_LEFT has been pressed");   break;
caseKEY_LEFT:          Print("The KEY_LEFT has been pressed");           break;
caseKEY_NUMLOCK_UP:    Print("The KEY_NUMLOCK_UP has been pressed");     break;
caseKEY_UP:            Print("The KEY_UP has been pressed");             break;
caseKEY_NUMLOCK_RIGHT: Print("The KEY_NUMLOCK_RIGHT has been pressed");  break;
caseKEY_RIGHT:         Print("The KEY_RIGHT has been pressed");          break;
caseKEY_NUMLOCK_DOWN:  Print("The KEY_NUMLOCK_DOWN has been pressed");   break;
caseKEY_DOWN:          Print("The KEY_DOWN has been pressed");           break;
caseKEY_NUMPAD_5:      Print("The KEY_NUMPAD_5 has been pressed");       break;
caseKEY_NUMLOCK_5:     Print("The KEY_NUMLOCK_5 has been pressed");      break;
default:                Print("Some not listed key has been pressed");
}
ChartRedraw();
}
//--- 物件被删除了
if(id==CHARTEVENT_OBJECT_DELETE)
{
Print("The object with name ",sparam," has been deleted");
}
//--- 物件被创建了
if(id==CHARTEVENT_OBJECT_CREATE)
{
Print("The object with name ",sparam," has been created");
}
//--- 移动物件或者更改定位点坐标
if(id==CHARTEVENT_OBJECT_DRAG)
{
Print("The anchor point coordinates of the object with name ",sparam," has been changed");
}
//--- 物件编辑文本被更改
if(id==CHARTEVENT_OBJECT_ENDEDIT)
{
Print("The text in the Edit field of the object with name ",sparam," has been changed");
}
}

对于CHARTEVENT_MOUSE_MOVE 事件 字符串参数包含有关键盘和鼠标按钮的状态信息:

Bit 描述
1 鼠标左按键状态
2 鼠标右按键状态
3 SHIFT 按钮状态
4 CTRL 按钮状态
5 鼠标中按键状态
6 第一个额外鼠标键的状态
7 第二个额外鼠标键的状态

示例:

//+------------------------------------------------------------------+
//| 专家初始化函数                                                     |
//+------------------------------------------------------------------+
voidOnInit()
{
//--- 启用 CHART_EVENT_MOUSE_MOVE 信息
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
}
//+------------------------------------------------------------------+
//| 鼠标点选位置                                                       |
//+------------------------------------------------------------------+
stringMouseState(uintstate)
{
stringres;
res+="\nML: "  +(((state& 1)== 1)?"DN":"UP");   // 鼠标左按键
res+="\nMR: "  +(((state& 2)== 2)?"DN":"UP");   // 鼠标右按键
res+="\nMM: "  +(((state&16)==16)?"DN":"UP");   // 鼠标中按键
res+="\nMX: "  +(((state&32)==32)?"DN":"UP");   // 鼠标第一个 X 键
res+="\nMY: "  +(((state&64)==64)?"DN":"UP");   // 鼠标第二个 X 键
res+="\nSHIFT: "+(((state& 4)== 4)?"DN":"UP");   // shift 键
res+="\nCTRL: "+(((state& 8)== 8)?"DN":"UP");   // control 键
return(res);
}
//+------------------------------------------------------------------+
//| ChartEvent 函数                                                   |
//+------------------------------------------------------------------+
voidOnChartEvent(constintid,constlong&lparam,constdouble&dparam,conststring&sparam)
{
if(id==CHARTEVENT_MOUSE_MOVE)
Comment("POINT: ",(int)lparam,",",(int)dparam,"\n",MouseState((uint)sparam));
}
打赏
版权所有转载请注明标题及链接:峰汇在线 » 2.1.1 图表事件类型
上一篇:
下一篇:
分享到: 更多 (0)

如您觉得此文不错请扫码打赏!

支付宝扫一扫打赏

微信扫一扫打赏