Русский

Справочник MQL4 Стандартные константы, перечисления и структуры Константы объектов Типы объектов OBJ_RECTANGLE_LABEL

OBJ_RECTANGLE_LABEL

Объект "Прямоугольная метка".

ObjRectangleLabel

Примечание

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

Для объектов OBJ_LABEL, OBJ_BITMAP_LABEL и OBJ_RECTANGLE_LABEL можно задавать угол графика, относительно которого позиционируется точка привязки объекта. Этот угол устанавливается через свойство объекта OBJPROP_CORNER, которое может иметь одно из четырех значений перечисления ENUM_BASE_CORNER:

Идентификатор

Описание

CORNER_LEFT_UPPER

Координаты точки привязки заданы относительно левого верхнего угла графика

CORNER_LEFT_LOWER

Координаты точки привязки заданы относительно левого нижнего угла графика

CORNER_RIGHT_LOWER

Координаты точки привязки заданы относительно правого нижнего угла графика

CORNER_RIGHT_UPPER

Координаты точки привязки заданы относительно правого верхнего угла графика

Пример

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

 

#property strict
//--- описание
#property description "Скрипт создает графический объект \"Прямоугольная метка\"."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string           InpName="RectLabel";         // Имя метки
input color            InpBackColor=clrSkyBlue;     // Цвет фона
input ENUM_BORDER_TYPE InpBorder=BORDER_FLAT;       // Тип рамки
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER// Угол графика для привязки
input color            InpColor=clrDarkBlue;        // Цвет плоской границы (Flat)
input ENUM_LINE_STYLE  InpStyle=STYLE_SOLID;        // Стиль плоской границы (Flat)
input int              InpLineWidth=3;              // Толщина плоской границы (Flat)
input bool             InpBack=false;               // Объект на заднем плане
input bool             InpSelection=true;           // Выделить для перемещений
input bool             InpHidden=true;              // Скрыт в списке объектов
input long             InpZOrder=0;                 // Приоритет на нажатие мышью
//+------------------------------------------------------------------+
//| Создает прямоугольную метку                                      |
//+------------------------------------------------------------------+
bool RectLabelCreate(const long             chart_ID=0,               // ID графика
                     const string           name="RectLabel",         // имя метки
                     const int              sub_window=0,             // номер подокна
                     const int              x=0,                      // координата по оси X
                     const int              y=0,                      // координата по оси Y
                     const int              width=50,                 // ширина
                     const int              height=18,                // высота
                     const color            back_clr=C'236,233,216',  // цвет фона
                     const ENUM_BORDER_TYPE border=BORDER_SUNKEN,     // тип границы
                     const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER// угол графика для привязки
                     const color            clr=clrRed,               // цвет плоской границы (Flat)
                     const ENUM_LINE_STYLE  style=STYLE_SOLID,        // стиль плоской границы
                     const int              line_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_RECTANGLE_LABEL,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": не удалось создать прямоугольную метку! Код ошибки = ",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_BGCOLOR,back_clr);
//--- установим тип границы
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим цвет плоской рамки (в режиме Flat)
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль линии плоской рамки
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину плоской границы
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_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 RectLabelMove(const long   chart_ID=0,       // ID графика
                   const string name="RectLabel"// имя метки
                   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 RectLabelChangeSize(const long   chart_ID=0,       // ID графика
                         const string name="RectLabel"// имя метки
                         const int    width=50,         // ширина метки
                         const int    height=18)        // высота метки
  {
//--- сбросим значение ошибки
   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 RectLabelChangeBorderType(const long             chart_ID=0,           // ID графика
                               const string           name="RectLabel",     // имя метки
                               const ENUM_BORDER_TYPE border=BORDER_SUNKEN// тип границы
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- изменим тип рамки
   if(!ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,border))
     {
      Print(__FUNCTION__,
            ": не удалось изменить тип границы! Код ошибки = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Удаляет прямоугольную метку                                      |
//+------------------------------------------------------------------+
bool RectLabelDelete(const long   chart_ID=0,       // ID графика
                     const string name="RectLabel"// имя метки
  {
//--- сбросим значение ошибки
   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/4;
   int y=(int)y_distance/4;
//--- установим размеры метки
   int width=(int)x_distance/4;
   int height=(int)y_distance/4;
//--- создадим прямоугольную метку
   if(!RectLabelCreate(0,InpName,0,x,y,width,height,InpBackColor,InpBorder,InpCorner,
      InpColor,InpStyle,InpLineWidth,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- перерисуем график и подождем одну секунду
   ChartRedraw();
   Sleep(1000);
//--- изменим размер прямоугольной метки
   int steps=(int)MathMin(x_distance/4,y_distance/4);
   for(int i=0;i<steps;i++)
     {
      //--- изменим размеры
      width+=1;
      height+=1;
      if(!RectLabelChangeSize(0,InpName,width,height))
         return;
      //--- проверим факт принудительного завершения скрипта
      if(IsStopped())
         return;
      //--- перерисуем график и подождем 0.01 секунды
      ChartRedraw();
      Sleep(10);
     }
//--- задержка в 1 секунду
   Sleep(1000);
//--- изменим тип рамки
   if(!RectLabelChangeBorderType(0,InpName,BORDER_RAISED))
      return;
//--- перерисуем график и подождем 1 секунду
   ChartRedraw();
   Sleep(1000);
//--- изменим тип рамки
   if(!RectLabelChangeBorderType(0,InpName,BORDER_SUNKEN))
      return;
//--- перерисуем график и подождем 1 секунду
   ChartRedraw();
   Sleep(1000);
//--- удалим метку
   RectLabelDelete(0,InpName);
   ChartRedraw();
//--- подождем 1 секунду
   Sleep(1000);
//---
  }