实现步骤:
1、定义变量
bool isVisible = true; // 控制指标显示状态的全局变量
2、在 init 函数中创建按钮
int init()
{
// 设置显示隐藏按钮
string buttonName = "ShowHideButton";
ObjectCreate(0, buttonName, OBJ_BUTTON, 0, 0, 0);
ObjectSetString(0, buttonName, OBJPROP_TEXT, "Hide"); // 按钮文本,默认为显示"Hide"
ObjectSetInteger(0, buttonName, OBJPROP_CORNER, 0); // 按钮位置,左上角
ObjectSetInteger(0, buttonName, OBJPROP_XDISTANCE, 10);
ObjectSetInteger(0, buttonName, OBJPROP_YDISTANCE, 10);
ObjectSetInteger(0, buttonName, OBJPROP_WIDTH, 50); // 按钮宽度
ObjectSetInteger(0, buttonName, OBJPROP_HEIGHT, 20); // 按钮高度
ObjectSetInteger(0, buttonName, OBJPROP_HIDDEN, false); // 确保按钮显示
// 其它初始化代码...
SetIndexBuffer(0, ST1u);
SetIndexBuffer(1, ST1d);
// 其他初始化代码
return(0);
}
3、在 OnChartEvent 中捕捉按钮点击事件
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
if(id == CHARTEVENT_OBJECT_CLICK && sparam == "ShowHideButton")
{
isVisible = !isVisible; // 切换显示状态
// 根据显示状态更新按钮文本
if(isVisible)
{
ObjectSetString(0, "ShowHideButton", OBJPROP_TEXT, "Hide");
ShowIndicator(true); // 显示指标
}
else
{
ObjectSetString(0, "ShowHideButton", OBJPROP_TEXT, "Show");
ShowIndicator(false); // 隐藏指标
}
}
}
4、创建显示或隐藏指标的函数 ShowIndicator
void ShowIndicator(bool show)
{
for (int i = 0; i < 8; i++) // 控制8个缓冲区(箭头)的显示/隐藏
{
if (show)
{
PlotIndexSetInteger(i, PLOT_SHOW_DATA, true); // 显示箭头
}
else
{
PlotIndexSetInteger(i, PLOT_SHOW_DATA, false); // 隐藏箭头
}
}
}
5、修改 deinit 函数删除按钮 确保在卸载指标时删除按钮:
int deinit()
{
ObjectDelete("ShowHideButton"); // 删除按钮
// 其他清理工作...
return(0);
}
总结:
通过按钮,用户可以点击来切换指标的显隐。
ShowIndicator 函数用于控制指标缓冲区的显示或隐藏。
使用 OnChartEvent 捕捉按钮点击事件来触发状态切换。
这样,在你的指标窗口左上角就会有一个“Hide”按钮,点击后指标会隐藏,按钮文字变为“Show”。再点击“Show”后,指标重新显示。
|