OBJ_BITMAP_LABEL

Объект "Графическая метка".

ObjBitmapLabel

Примечание

Положение точки привязки относительно метки можно выбрать из перечисления ENUM_ANCHOR_POINT. Координаты точки привязки задаются в пикселях.

Также можно выбрать угол привязки графической метки из перечисления ENUM_BASE_CORNER.

Для объекта "Графическая метка" можно выбирать область видимости рисунка.

Пример

Следующий скрипт создает на графике несколько картинок. Для создания и изменения свойств графического объекта написаны специальные функции, которые вы можете использовать "как есть" в своих собственных программах.

//--- описание
#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);
//---
  }