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