#property strict
//--- описание
#property description "Скрипт создает объект \"Графическая метка\"."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string InpName="BmpLabel"; // Имя метки
input string InpFileOn="\\Images\\dollar.bmp"; // Имя файла для режима On
input string InpFileOff="\\Images\\euro.bmp"; // Имя файла для режима Off
input bool InpState=false; // Метка нажата/отжата
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER; // Угол графика для привязки
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_CENTER; // Способ привязки
input color InpColor=clrRed; // Цвет рамки при выделении
input ENUM_LINE_STYLE InpStyle=STYLE_SOLID; // Стиль линии при выделении
input int InpPointWidth=1; // Размер точки для перемещений
input bool InpBack=false; // Объект на заднем плане
input bool InpSelection=false; // Выделить для перемещений
input bool InpHidden=true; // Скрыт в списке объектов
input long InpZOrder=0; // Приоритет на нажатие мышью
//+------------------------------------------------------------------+
//| Создает объект "Графическая метка" |
//+------------------------------------------------------------------+
bool BitmapLabelCreate(const long chart_ID=0, // ID графика
const string name="BmpLabel", // имя метки
const int sub_window=0, // номер подокна
const int x=0, // координата по оси X
const int y=0, // координата по оси Y
const string file_on="", // картинка в режиме On
const string file_off="", // картинка в режиме Off
const int width=0, // X-координата области видимости
const int height=0, // Y-координата области видимости
const int x_offset=10, // смещение области видимости по X
const int y_offset=10, // смещение области видимости по Y
const bool state=false, // нажата/отжата
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
const color clr=clrRed, // цвет рамки при выделении
const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии при выделении
const int point_width=1, // размер точки перемещения
const bool back=false, // на заднем плане
const bool selection=false, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
//--- сбросим значение ошибки
ResetLastError();
//--- создадим графическую метку
if(!ObjectCreate(chart_ID,name,OBJ_BITMAP_LABEL,sub_window,0,0))
{
Print(__FUNCTION__,
": не удалось создать объект \"Графическая метка\"! Код ошибки = ",GetLastError());
return(false);
}
//--- установим картинки для режимов On и Off
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,0,file_on))
{
Print(__FUNCTION__,
": не удалось загрузить картинку для режима On! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,1,file_off))
{
Print(__FUNCTION__,
": не удалось загрузить картинку для режима Off! Код ошибки = ",GetLastError());
return(false);
}
//--- установим координаты метки
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим область видимости изображения; если значения ширины или высоты
//--- больше значений ширины и высоты (соответственно) исходного изображения, то
//--- оно не рисуется; если значения ширины и высоты меньше размеров изображения,
//--- то рисуется та его часть, которая соответствует этим размерам
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- установим, какая часть изображения должна показываться в области видимости
//--- по умолчанию это левая верхняя область изображения; значения позволяют
//--- произвести сдвиг от этого угла и отобразить другую часть изображения
ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset);
ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset);
//--- установим, в каком сотоянии находится метка (нажатом или отжатом)
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
//--- установим угол графика, относительно которого будут определяться координаты точки
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим способ привязки
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет рамки при включенном режиме выделения объекта
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линии рамки при включенном режиме выделения объекта
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим размер точки привязки, с помощью которой можно перемещать объект
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,point_width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения метки мышью
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Устанавливает новую картинку для объекта "Графическая метка" |
//+------------------------------------------------------------------+
bool BitmapLabelSetImage(const long chart_ID=0, // ID графика
const string name="BmpLabel", // имя метки
const int on_off=0, // модификатор (On или Off)
const string file="") // путь к файлу
{
//--- сбросим значение ошибки
ResetLastError();
//--- установим путь к файлу с картинкой
if(!ObjectSetString(chart_ID,name,OBJPROP_BMPFILE,on_off,file))
{
Print(__FUNCTION__,
": не удалось загрузить картинку! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Перемещает объект "Графическая метка" |
//+------------------------------------------------------------------+
bool BitmapLabelMove(const long chart_ID=0, // ID графика
const string name="BmpLabel", // имя метки
const int x=0, // координата по оси X
const int y=0) // координата по оси Y
{
//--- сбросим значение ошибки
ResetLastError();
//--- переместим объект
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))
{
Print(__FUNCTION__,
": не удалось переместить X-координату объекта! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))
{
Print(__FUNCTION__,
": не удалось переместить Y-координату объекта! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Изменяет размер области видимости (размер объекта) |
//+------------------------------------------------------------------+
bool BitmapLabelChangeSize(const long chart_ID=0, // ID графика
const string name="BmpLabel", // имя метки
const int width=0, // ширина метки
const int height=0) // высота метки
{
//--- сбросим значение ошибки
ResetLastError();
//--- изменим размеры объекта
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width))
{
Print(__FUNCTION__,
": не удалось изменить ширину объекта! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height))
{
Print(__FUNCTION__,
": не удалось изменить высоту объекта! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Изменяет координату левого верхнего угла области видимости |
//+------------------------------------------------------------------+
bool BitmapLabelMoveVisibleArea(const long chart_ID=0, // ID графика
const string name="BmpLabel", // имя метки
const int x_offset=0, // координата X области видимости
const int y_offset=0) // координата Y области видимости
{
//--- сбросим значение ошибки
ResetLastError();
//--- изменим координаты области видимости объекта
if(!ObjectSetInteger(chart_ID,name,OBJPROP_XOFFSET,x_offset))
{
Print(__FUNCTION__,
": не удалось изменить X-координату области видимости! Код ошибки = ",GetLastError());
return(false);
}
if(!ObjectSetInteger(chart_ID,name,OBJPROP_YOFFSET,y_offset))
{
Print(__FUNCTION__,
": не удалось изменить Y-координату области видимости! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Удаляет объект "Графическая метка" |
//+------------------------------------------------------------------+
bool BitmapLabelDelete(const long chart_ID=0, // ID графика
const string name="BmpLabel") // имя метки
{
//--- сбросим значение ошибки
ResetLastError();
//--- удалим метку
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить объект \"Графическая метка\"! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- размеры окна графика
long x_distance;
long y_distance;
//--- определим размеры окна
if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))
{
Print("Не удалось получить ширину графика! Код ошибки = ",GetLastError());
return;
}
if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))
{
Print("Не удалось получить высоту графика! Код ошибки = ",GetLastError());
return;
}
//--- определим координаты графической метки
int x=(int)x_distance/2;
int y=(int)y_distance/2;
//--- установим размеры метки и координаты области видимости
int width=32;
int height=32;
int x_offset=0;
int y_offset=0;
//--- разместим графическую метку по центру окна
if(!BitmapLabelCreate(0,InpName,0,x,y,InpFileOn,InpFileOff,width,height,x_offset,y_offset,InpState,
InpCorner,InpAnchor,InpColor,InpStyle,InpPointWidth,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- перерисуем график и подождем одну секунду
ChartRedraw();
Sleep(1000);
//--- изменим размеры области видимости метки в цикле
for(int i=0;i<6;i++)
{
//--- изменим размеры области видимости
width--;
height--;
if(!BitmapLabelChangeSize(0,InpName,width,height))
return;
//--- проверим факт принудительного завершения скрипта
if(IsStopped())
return;
//--- перерисуем график
ChartRedraw();
// задержка в 0.3 секунды
Sleep(300);
}
//--- задержка в 1 секунду
Sleep(1000);
//--- изменим координаты области видимости метки в цикле
for(int i=0;i<2;i++)
{
//--- изменим координаты области видимости
x_offset++;
y_offset++;
if(!BitmapLabelMoveVisibleArea(0,InpName,x_offset,y_offset))
return;
//--- проверим факт принудительного завершения скрипта
if(IsStopped())
return;
//--- перерисуем график
ChartRedraw();
// задержка в 0.3 секунды
Sleep(300);
}
//--- задержка в 1 секунду
Sleep(1000);
//--- удалим метку
BitmapLabelDelete(0,InpName);
ChartRedraw();
//--- задержка в 1 секунду
Sleep(1000);
//---
} |