forked from airat77786/MQL5Book
124 lines
4 KiB
MQL5
124 lines
4 KiB
MQL5
//+------------------------------------------------------------------+
| |||
//| ResourceText.mq5 |
| |||
//| Copyright 2022, MetaQuotes Ltd. |
| |||
//| https://www.mql5.com |
| |||
//+------------------------------------------------------------------+
| |||
#property copyright "Copyright 2022, MetaQuotes Ltd."
| |||
#property link "https://www.mql5.com"
| |||
#property description "Display text in different styles."
| |||
#property script_show_inputs
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| |
| |||
//+------------------------------------------------------------------+
| |||
input string Font = "Arial"; // Font Name
| |||
input int Size = -240; // Size
| |||
input color Color = clrBlue; // Font Color
| |||
input color Background = clrNONE; // Background Color
| |||
input uint Seconds = 10; // Demo Time (seconds)
| |||
| |||
enum ENUM_FONT_WEIGHTS
| |||
{
| |||
_DONTCARE = FW_DONTCARE,
| |||
_THIN = FW_THIN,
| |||
_EXTRALIGHT = FW_EXTRALIGHT,
| |||
_LIGHT = FW_LIGHT,
| |||
_NORMAL = FW_NORMAL,
| |||
_MEDIUM = FW_MEDIUM,
| |||
_SEMIBOLD = FW_SEMIBOLD,
| |||
_BOLD = FW_BOLD,
| |||
_EXTRABOLD = FW_EXTRABOLD,
| |||
_HEAVY = FW_HEAVY,
| |||
};
| |||
| |||
int Random(const int limit)
| |||
{
| |||
return rand() % limit;
| |||
}
| |||
| |||
//+------------------------------------------------------------------+
| |||
//| Script program start function |
| |||
//+------------------------------------------------------------------+
| |||
void OnStart()
| |||
{
| |||
const uint weights[] =
| |||
{
| |||
FW_DONTCARE,
| |||
FW_THIN,
| |||
FW_EXTRALIGHT, // FW_ULTRALIGHT,
| |||
FW_LIGHT,
| |||
FW_NORMAL, // FW_REGULAR,
| |||
FW_MEDIUM,
| |||
FW_SEMIBOLD, // FW_DEMIBOLD,
| |||
FW_BOLD,
| |||
FW_EXTRABOLD, // FW_ULTRABOLD,
| |||
FW_HEAVY, // FW_BLACK
| |||
};
| |||
| |||
const int nw = sizeof(weights) / sizeof(uint);
| |||
| |||
const uint rendering[] =
| |||
{
| |||
FONT_ITALIC,
| |||
FONT_UNDERLINE,
| |||
FONT_STRIKEOUT
| |||
};
| |||
| |||
const int nr = sizeof(rendering) / 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);
| |||
| |||
uint data[];
| |||
| |||
// empty resource for binding with the object
| |||
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_RAW);
| |||
ObjectSetString(0, name, OBJPROP_BMPFILE, "::" + name);
| |||
| |||
const int step = h / (ArraySize(weights) + 2);
| |||
int cursor = 0;
| |||
| |||
for(int weight = 0; weight < ArraySize(weights); ++weight)
| |||
{
| |||
// apply new style
| |||
const int r = Random(8);
| |||
uint render = 0;
| |||
for(int j = 0; j < 3; ++j)
| |||
{
| |||
if((bool)(r & (1 << j))) render |= rendering[j];
| |||
}
| |||
TextSetFont(Font, Size, weights[weight] | render);
| |||
| |||
// generate font description
| |||
const string text = Font + EnumToString((ENUM_FONT_WEIGHTS)weights[weight]);
| |||
| |||
// draw the text on a separate line
| |||
cursor += step;
| |||
TextOut(text, w / 2, cursor, TA_CENTER | TA_TOP, data, w, h,
| |||
ColorToARGB(Color), COLOR_FORMAT_ARGB_RAW);
| |||
}
| |||
| |||
// update the resource and the chart
| |||
ResourceCreate(name, data, w, h, 0, 0, w, COLOR_FORMAT_ARGB_RAW);
| |||
ChartRedraw();
| |||
| |||
const uint timeout = GetTickCount() + Seconds * 1000;
| |||
while(!IsStopped() && GetTickCount() < timeout)
| |||
{
| |||
Sleep(1000);
| |||
}
| |||
| |||
ObjectDelete(0, name);
| |||
ResourceFree("::" + name);
| |||
}
| |||
//+------------------------------------------------------------------+
|