forked from rosh/MQL5Book
126 lines
4.9 KiB
MQL5
126 lines
4.9 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| EventAllObjects.mq5 |
| |
//| Copyright 2021, MetaQuotes Ltd. |
| |
//| https://www.mql5.com |
| |
//+------------------------------------------------------------------+
| |
#property copyright "2021, MetaQuotes Ltd."
| |
#property link "https://www.mql5.com"
| |
#property description "This indicator creates a bunch of objects and takes some actions on them.\n"
| |
"Also it traces and prints all events to the log."
| |
| |
#property indicator_chart_window
| |
#property indicator_buffers 0
| |
#property indicator_plots 0
| |
| |
#include "..\..\Include\ObjectMonitor.mqh"
| |
| |
const string ObjNamePrefix = "EventShow-";
| |
const string ButtonName = ObjNamePrefix + "Button";
| |
const string EditBoxName = ObjNamePrefix + "EditBox";
| |
const string VLineName = ObjNamePrefix + "VLine";
| |
| |
bool objectCreate, objectDelete;
| |
| |
//+------------------------------------------------------------------+
| |
//| Helper class for object creation and setup |
| |
//+------------------------------------------------------------------+
| |
class ObjectBuilder: public ObjectSelector
| |
{
| |
protected:
| |
const ENUM_OBJECT type;
| |
const int window;
| |
public:
| |
ObjectBuilder(const string _id, const ENUM_OBJECT _type,
| |
const long _chart = 0, const int _win = 0):
| |
ObjectSelector(_id, _chart), type(_type), window(_win)
| |
{
| |
ObjectCreate(host, id, type, window, 0, 0);
| |
}
| |
// changing name and chart is prohibited in the builder
| |
virtual void name(const string _id) override = delete;
| |
virtual void chart(const long _chart) override = delete;
| |
};
| |
| |
//+------------------------------------------------------------------+
| |
//| Custom indicator initialization function |
| |
//+------------------------------------------------------------------+
| |
void OnInit()
| |
{
| |
// remember default settings
| |
objectCreate = ChartGetInteger(0, CHART_EVENT_OBJECT_CREATE);
| |
objectDelete = ChartGetInteger(0, CHART_EVENT_OBJECT_DELETE);
| |
| |
// assign new settings
| |
ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
| |
ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
| |
| |
// create and setup demo objects
| |
ObjectBuilder button(ButtonName, OBJ_BUTTON);
| |
button.set(OBJPROP_XDISTANCE, 100).set(OBJPROP_YDISTANCE, 100)
| |
.set(OBJPROP_XSIZE, 200).set(OBJPROP_TEXT, "Click Me");
| |
| |
ObjectBuilder line(VLineName, OBJ_VLINE);
| |
line.set(OBJPROP_TIME, iTime(NULL, 0, 0))
| |
.set(OBJPROP_SELECTABLE, true).set(OBJPROP_SELECTED, true)
| |
.set(OBJPROP_TEXT, "Drag Me").set(OBJPROP_TOOLTIP, "Drag Me");
| |
| |
ChartRedraw();
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Custom indicator iteration function |
| |
//| (dummy here, required for indicator) |
| |
//+------------------------------------------------------------------+
| |
int OnCalculate(const int rates_total,
| |
const int prev_calculated,
| |
const int begin,
| |
const double &price[])
| |
{
| |
return rates_total;
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Chart event handler |
| |
//+------------------------------------------------------------------+
| |
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
| |
{
| |
ENUM_CHART_EVENT evt = (ENUM_CHART_EVENT)id;
| |
PrintFormat("%s %lld %f '%s'", EnumToString(evt), lparam, dparam, sparam);
| |
if(id == CHARTEVENT_OBJECT_CLICK && sparam == ButtonName)
| |
{
| |
if(ObjectGetInteger(0, ButtonName, OBJPROP_STATE))
| |
{
| |
ObjectBuilder edit(EditBoxName, OBJ_EDIT);
| |
edit.set(OBJPROP_XDISTANCE, 100).set(OBJPROP_YDISTANCE, 150)
| |
.set(OBJPROP_BGCOLOR, clrWhite)
| |
.set(OBJPROP_XSIZE, 200).set(OBJPROP_TEXT, "Edit Me");
| |
}
| |
else
| |
{
| |
ObjectDelete(0, EditBoxName);
| |
}
| |
| |
ChartRedraw();
| |
}
| |
else if(id == CHARTEVENT_OBJECT_ENDEDIT && sparam == EditBoxName)
| |
{
| |
Print(ObjectGetString(0, EditBoxName, OBJPROP_TEXT));
| |
}
| |
else if(id == CHARTEVENT_OBJECT_DRAG && sparam == VLineName)
| |
{
| |
Print(TimeToString((datetime)ObjectGetInteger(0, VLineName, OBJPROP_TIME)));
| |
}
| |
}
| |
| |
//+------------------------------------------------------------------+
| |
//| Finalization handler |
| |
//+------------------------------------------------------------------+
| |
void OnDeinit(const int)
| |
{
| |
// restore initial settings
| |
ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, objectCreate);
| |
ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, objectDelete);
| |
ObjectsDeleteAll(0, ObjNamePrefix);
| |
ChartRedraw();
| |
}
| |
//+------------------------------------------------------------------+
|