forked from airat77786/MQL5Book
75 lines
3 KiB
MQL5
75 lines
3 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| ObjectZorder.mq5 |
| |||
//| Copyright 2021, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//| |
| |||
//| The script creates 12 rectangle labels with random colors |
| |||
//| and Z-order. Creation order and visible overlapping occures |
| |||
//| according to clockwise order: 1, 2, ... 12. |
| |||
//+------------------------------------------------------------------+
| |||
#include "ObjectPrefix.mqh"
| |||
#include "..\..\Include\ObjectMonitor.mqh"
| |||
| |||
#define OBJECT_NUMBER 12
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| 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);
| |||
}
| |||
| |||
bool isExisting() const
| |||
{
| |||
return ObjectFind(host, id) == window;
| |||
}
| |||
| |||
// 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;
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
const int t = ChartWindowOnDropped();
| |||
| |||
int h = (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, t);
| |||
int w = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
| |||
int x = w / 2;
| |||
int y = h / 2;
| |||
const int dx = w / 4;
| |||
const int dy = h / 4;
| |||
| |||
// create and setup 12 labels in clockwise order
| |||
for(int i = 0; i < OBJECT_NUMBER; ++i)
| |||
{
| |||
const int px = (int)(MathSin((i + 1) * 30 * M_PI / 180) * dx) - dx / 2;
| |||
const int py = -(int)(MathCos((i + 1) * 30 * M_PI / 180) * dy) - dy / 2;
| |||
| |||
const int z = rand();
| |||
const string text = StringFormat("%02d - %d", i + 1, z);
| |||
| |||
ObjectBuilder *builder = new ObjectBuilder(ObjNamePrefix + text, OBJ_RECTANGLE_LABEL);
| |||
builder.set(OBJPROP_XDISTANCE, x + px).set(OBJPROP_YDISTANCE, y + py)
| |||
.set(OBJPROP_XSIZE, dx).set(OBJPROP_YSIZE, dy)
| |||
.set(OBJPROP_TOOLTIP, text)
| |||
.set(OBJPROP_ZORDER, z)
| |||
.set(OBJPROP_BGCOLOR, (rand() << 8) ^ rand());
| |||
delete builder;
| |||
}
| |||
// 12 objects are left on chart after this script execution,
| |||
// you may use ObjectCleanup1.mq5 script to remove them.
| |||
}
| |||
//+------------------------------------------------------------------+
|