在图表操作中,有9种可以通过预定义函数OnChartEvent()处理的事件。对于自定义事件,提供了65535个标识符,范围从CHARTEVENT_CUSTOM到CHARTEVENT_CUSTOM_LAST。要生成自定义事件,请使用EventChartCustom()函数。
以下是这9种事件的一些详细说明,以及一些示例代码。
事件类型:
- 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()函数都有明确的值,对于处理该事件是必需的。通过这些参数传递的事件和值在下表中列出。
以下是一个代码示例,展示了如何使用预定义的OnChartEvent()函数来处理不同类型的事件。在这个示例中,我们打印了每个事件发生时的相关信息。
int OnInit()
{
// 启用对象创建事件
ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_CREATE, true);
// 启用对象删除事件
ChartSetInteger(ChartID(), CHART_EVENT_OBJECT_DELETE, true);
return(INIT_SUCCEEDED);
}
void OnChartEvent(const int id, // 事件标识符
const long& lparam, // 长类型的事件参数
const double& dparam, // 双类型的事件参数
const string& sparam) // 字符串类型的事件参数
{
if(id == CHARTEVENT_CLICK)
{
Print("鼠标点击图表的坐标:x = ", lparam, " y = ", dparam);
}
if(id == CHARTEVENT_OBJECT_CLICK)
{
Print("鼠标点击名为 '" + sparam + "' 的对象");
}
if(id == CHARTEVENT_OBJECT_DELETE)
{
Print("名为 ", sparam, " 的对象已被删除");
}
if(id == CHARTEVENT_OBJECT_CREATE)
{
Print("名为 ", sparam, " 的对象已被创建");
}
if(id == CHARTEVENT_OBJECT_DRAG)
{
Print("名为 ", sparam, " 的对象的锚点坐标已更改");
}
if(id == CHARTEVENT_OBJECT_ENDEDIT)
{
Print("名为 ", sparam, " 的对象的编辑框中的文本已更改");
}
}
对于CHARTEVENT_MOUSE_MOVE事件,sparam字符串参数包含有关键盘和鼠标按钮状态的信息:
位 描述
1 左键状态
2 右键状态
3 SHIFT键状态
4 CTRL键状态
5 中键状态
6 第一个额外的鼠标按钮状态
7 第二个额外的鼠标按钮状态
请注意,这里提供的示例代码仅作为说明。在实际应用中,可以根据需要调整代码来适应特定的需求。