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