OBJ_EDIT

Объект "Поле ввода".

ObjEdit

Примечание

Координаты точки привязки задаются в пикселях. Можно выбрать угол привязки "Поля ввода" из перечисления ENUM_BASE_CORNER.

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

Пример

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

//--- описание
#property description "Скрипт создает объект \"Поле ввода\"."
//--- покажем окно входных параметров при запуске скрипта
#property script_show_inputs
//--- входные параметры скрипта
input string           InpName="Edit";              // Имя объекта
input string           InpText="Text";              // Текст объекта
input string           InpFont="Arial";             // Шрифт
input int              InpFontSize=14;              // Размер шрифта
input ENUM_ALIGN_MODE  InpAlign=ALIGN_CENTER;       // Способ выравнивания текста
input bool             InpReadOnly=false;           // Возможность редактировать
input ENUM_BASE_CORNER InpCorner=CORNER_LEFT_UPPER// Угол графика для привязки
input color            InpColor=clrBlack;           // Цвет текста
input color            InpBackColor=clrWhite;       // Цвет фона
input color            InpBorderColor=clrBlack;     // Цвет границы
input bool             InpBack=false;               // Объект на заднем плане
input bool             InpSelection=false;          // Выделить для перемещений
input bool             InpHidden=true;              // Скрыт в списке объектов
input long             InpZOrder=0;                 // Приоритет на нажатие мышью
//+------------------------------------------------------------------+
//| Создает объект "Поле ввода"                                      |
//+------------------------------------------------------------------+
bool EditCreate(const long             chart_ID=0,               // ID графика
                const string           name="Edit",              // имя объекта
                const int              sub_window=0,             // номер подокна
                const int              x=0,                      // координата по оси X
                const int              y=0,                      // координата по оси Y
                const int              width=50,                 // ширина
                const int              height=18,                // высота
                const string           text="Text",              // текст
                const string           font="Arial",             // шрифт
                const int              font_size=10,             // размер шрифта
                const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // способ выравнивания
                const bool             read_only=false,          // возможность редактировать
                const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER// угол графика для привязки
                const color            clr=clrBlack,             // цвет текста
                const color            back_clr=clrWhite,        // цвет фона
                const color            border_clr=clrNONE,       // цвет границы
                const bool             back=false,               // на заднем плане
                const bool             selection=false,          // выделить для перемещений
                const bool             hidden=true,              // скрыт в списке объектов
                const long             z_order=0)                // приоритет на нажатие мышью
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим поле ввода
   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,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);
//--- установим текст
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- установим размер шрифта
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- установим способ выравнивания текста в объекте
   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- установим (true) или отменим (false) режим только для чтения
   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- установим угол графика, относительно которого будут определяться координаты объекта
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим цвет текста
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим цвет фона
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- установим цвет границы
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- отобразим на переднем (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 EditMove(const long   chart_ID=0,  // ID графика
              const string name="Edit"// имя объекта
              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 EditChangeSize(const long   chart_ID=0,  // ID графика
                    const string name="Edit"// имя объекта
                    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 EditTextChange(const long   chart_ID=0,  // ID графика
                    const string name="Edit"// имя объекта
                    const string text="Text"// текст
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- изменим текст объекта
   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
     {
      Print(__FUNCTION__,
            ": не удалось изменить текст! Код ошибки = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Возвращает текст объекта "Поле ввода"                            |
//+------------------------------------------------------------------+
bool EditTextGet(string      &text,        // текст
                 const long   chart_ID=0,  // ID графика
                 const string name="Edit"// имя объекта
  {
//--- сбросим значение ошибки
   ResetLastError();
//--- получим текст объекта
   if(!ObjectGetString(chart_ID,name,OBJPROP_TEXT,0,text))
     {
      Print(__FUNCTION__,
            ": не удалось получить текст! Код ошибки = ",GetLastError());
      return(false);
     }
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Удаляет объект "Поле ввода"                                      |
//+------------------------------------------------------------------+
bool EditDelete(const long   chart_ID=0,  // ID графика
                const string name="Edit"// имя объекта
  {
//--- сбросим значение ошибки
   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_step=(int)x_distance/64;
//--- установим координаты поля ввода и его размер
   int x=(int)x_distance/8;
   int y=(int)y_distance/2;
   int x_size=(int)x_distance/8;
   int y_size=InpFontSize*2;
//--- запомним текст в локальную переменную
   string text=InpText;
//--- создадим поле ввода
   if(!EditCreate(0,InpName,0,x,y,x_size,y_size,InpText,InpFont,InpFontSize,InpAlign,InpReadOnly,
      InpCorner,InpColor,InpBackColor,InpBorderColor,InpBack,InpSelection,InpHidden,InpZOrder))
     {
      return;
     }
//--- перерисуем график и подождем 1 секунду
   ChartRedraw();
   Sleep(1000);
//--- растянем поле ввода
   while(x_size-x<x_distance*5/8)
     {
      //--- увеличим ширину поля ввода
      x_size+=x_step;
      if(!EditChangeSize(0,InpName,x_size,y_size))
         return;
      //--- проверим факт принудительного завершения скрипта
      if(IsStopped())
         return;
      //--- перерисуем график и подождем 0.05 секунды
      ChartRedraw();
      Sleep(50);
     }
//--- задержка в полсекунды
   Sleep(500);
//--- изменим текст
   for(int i=0;i<20;i++)
     {
      //--- прибавим "+" в начале и конце
      text="+"+text+"+";
      if(!EditTextChange(0,InpName,text))
         return;
      //--- проверим факт принудительного завершения скрипта
      if(IsStopped())
         return;
      //--- перерисуем график и подождем 0.1 секунды
      ChartRedraw();
      Sleep(100);
     }
//--- задержка в полсекунды
   Sleep(500);
//--- удалим поле ввода
   EditDelete(0,InpName);
   ChartRedraw();
//--- подождем 1 секунду
   Sleep(1000);
//---
  }