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();
|
|
}
|
|
//+------------------------------------------------------------------+
|