forked from airat77786/MQL5Book
114 lines
4.1 KiB
MQL5
114 lines
4.1 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| ResourceTextAnchOrientation.mq5 |
| |||
//| Copyright 2022, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#property copyright "Copyright 2022, MetaQuotes Ltd."
| |||
#property link "https://www.mql5.com"
| |||
#property description "Draw many text examples with different anchor point and orientation."
| |||
#property script_show_inputs
| |||
| |||
#include "..\..\Include\ColorMix.mqh"
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| |
| |||
//+------------------------------------------------------------------+
| |||
input string Font = "Arial"; // Font Name
| |||
input int Size = -150; // Size
| |||
input int ExampleCount = 11; // Number of examples
| |||
input color Background = clrNONE; // Background Color
| |||
input uint Seconds = 10; // Demo Time (seconds)
| |||
| |||
int Random(const int limit)
| |||
{
| |||
return rand() % limit;
| |||
}
| |||
| |||
enum ENUM_TEXT_ANCHOR
| |||
{
| |||
LEFT_TOP = TA_LEFT | TA_TOP,
| |||
LEFT_VCENTER = TA_LEFT | TA_VCENTER,
| |||
LEFT_BOTTOM = TA_LEFT | TA_BOTTOM,
| |||
CENTER_TOP = TA_CENTER | TA_TOP,
| |||
CENTER_VCENTER = TA_CENTER | TA_VCENTER,
| |||
CENTER_BOTTOM = TA_CENTER | TA_BOTTOM,
| |||
RIGHT_TOP = TA_RIGHT | TA_TOP,
| |||
RIGHT_VCENTER = TA_RIGHT | TA_VCENTER,
| |||
RIGHT_BOTTOM = TA_RIGHT | TA_BOTTOM,
| |||
};
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
const ENUM_TEXT_ANCHOR anchors[] =
| |||
{
| |||
LEFT_TOP,
| |||
LEFT_VCENTER,
| |||
LEFT_BOTTOM,
| |||
CENTER_TOP,
| |||
CENTER_VCENTER,
| |||
CENTER_BOTTOM,
| |||
RIGHT_TOP,
| |||
RIGHT_VCENTER,
| |||
RIGHT_BOTTOM,
| |||
};
| |||
| |||
const int na = sizeof(anchors) / sizeof(uint);
| |||
| |||
const string name = "FONT";
| |||
const int w = (int)ChartGetInteger(0, CHART_WIDTH_IN_PIXELS);
| |||
const int h = (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS);
| |||
| |||
// on-chart object to hold bitmap resource
| |||
ObjectCreate(0, name, OBJ_BITMAP_LABEL, 0, 0, 0);
| |||
// adjust the object dimensions
| |||
ObjectSetInteger(0, name, OBJPROP_XSIZE, w);
| |||
ObjectSetInteger(0, name, OBJPROP_YSIZE, h);
| |||
| |||
// prepare empty buffer for resource for setting to the object
| |||
uint data[];
| |||
ArrayResize(data, w * h);
| |||
// transparent background by default
| |||
ArrayInitialize(data, Background == clrNONE ? 0 : ColorToARGB(Background));
| |||
ResourceCreate(name, data, w, h, 0, 0, w, COLOR_FORMAT_ARGB_NORMALIZE);
| |||
ObjectSetString(0, name, OBJPROP_BMPFILE, "::" + name);
| |||
| |||
for(int i = 0; i < ExampleCount; ++i)
| |||
{
| |||
// apply random angle
| |||
const int angle = Random(360);
| |||
TextSetFont(Font, Size, 0, angle * 10);
| |||
| |||
// get random coordinates and anchor point
| |||
const ENUM_TEXT_ANCHOR anchor = anchors[Random(na)];
| |||
const int x = Random(w / 2) + w / 4;
| |||
const int y = Random(h / 2) + h / 4;
| |||
const color clr = ColorMix::HSVtoRGB(angle);
| |||
| |||
// draw the bullet just at the binding point of the text
| |||
TextOut(ShortToString(0x2022), x, y, TA_CENTER | TA_VCENTER, data, w, h,
| |||
ColorToARGB(clr), COLOR_FORMAT_ARGB_NORMALIZE);
| |||
| |||
// generate altered text
| |||
const string text = EnumToString(anchor) + "(" + (string)angle + CharToString(0xB0) + ")";
| |||
| |||
// draw the text
| |||
TextOut(text, x, y, anchor, data, w, h,
| |||
ColorToARGB(clr), COLOR_FORMAT_ARGB_NORMALIZE);
| |||
}
| |||
// update the resource and the chart
| |||
ResourceCreate(name, data, w, h, 0, 0, w, COLOR_FORMAT_ARGB_NORMALIZE);
| |||
ChartRedraw();
| |||
| |||
const uint timeout = GetTickCount() + Seconds * 1000;
| |||
while(!IsStopped() && GetTickCount() < timeout)
| |||
{
| |||
Sleep(1000);
| |||
}
| |||
| |||
ObjectDelete(0, name);
| |||
ResourceFree("::" + name);
| |||
}
| |||
//+------------------------------------------------------------------+
|