Обьект "Edit" двигается с графиком.

 

Добрый день,


Проблема в том, что обьект "Edit" двигается вместе с масшатабированием графика, что очень неудобно. Можно ли это как-то изменить?

 

Этого не может быть, привязка идёт к углу графика и не зависит от масштаба графика. Что-то не так делаете, например, задаёте другие координаты.

//перерисовываем поле ввода по новым координатам, если его нет, то создаём
void RedrawEdit(long eChartId, int eWindow, string eName, long eXdistance, long eYdistance, long eXsize, long eYsize, ENUM_BASE_CORNER eCorner, ENUM_ALIGN_MODE eAlign, bool eReadOnly, string eText, string eFont, int eSize, color eColor, color eColorBG, color eColorBR)
   {
   if(ObjectFind(eChartId,eName)==-1)
      {
      if(!ObjectCreate(eChartId,eName,OBJ_EDIT,eWindow,0,0)) return;
      //угол графика, относительно которого будут определяться координаты точки
      ObjectSetInteger(eChartId,eName,OBJPROP_CORNER,eCorner);
      //шрифт текста
      ObjectSetString(eChartId,eName,OBJPROP_FONT,eFont);
      //размер шрифта
      ObjectSetInteger(eChartId,eName,OBJPROP_FONTSIZE,eSize);
      //способ выравнивания текста в объекте
      ObjectSetInteger(eChartId,eName,OBJPROP_ALIGN,eAlign);
      //режим только для чтения
      ObjectSetInteger(eChartId,eName,OBJPROP_READONLY,eReadOnly);
      //на переднем  плане
      ObjectSetInteger(eChartId,eName,OBJPROP_BACK,false);
      ObjectSetInteger(eChartId,eName,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(eChartId,eName,OBJPROP_SELECTED,false);
      ObjectSetInteger(eChartId,eName,OBJPROP_HIDDEN,true);
      //ObjectSetInteger(eChartId,eName,OBJPROP_ZORDER,0);
      }
   if(ObjectFind(eChartId,eName)==-1) return;
   //координаты
   if(ObjectGetInteger(eChartId,eName,OBJPROP_XDISTANCE)!=eXdistance) ObjectSetInteger(eChartId,eName,OBJPROP_XDISTANCE,eXdistance);
   if(ObjectGetInteger(eChartId,eName,OBJPROP_YDISTANCE)!=eYdistance) ObjectSetInteger(eChartId,eName,OBJPROP_YDISTANCE,eYdistance);
   //размеры
   if(ObjectGetInteger(eChartId,eName,OBJPROP_XSIZE)!=eXsize) ObjectSetInteger(eChartId,eName,OBJPROP_XSIZE,eXsize);
   if(ObjectGetInteger(eChartId,eName,OBJPROP_YSIZE)!=eYsize) ObjectSetInteger(eChartId,eName,OBJPROP_YSIZE,eYsize);
   //цвет фона
   if(ObjectGetInteger(eChartId,eName,OBJPROP_BGCOLOR)!=eColorBG) ObjectSetInteger(eChartId,eName,OBJPROP_BGCOLOR,eColorBG);
   //цвет рамки
   if(ObjectGetInteger(eChartId,eName,OBJPROP_BORDER_COLOR)!=eColorBR) ObjectSetInteger(eChartId,eName,OBJPROP_BORDER_COLOR,eColorBR);
   //цвет текста
   if(ObjectGetInteger(eChartId,eName,OBJPROP_COLOR)!=eColor) ObjectSetInteger(eChartId,eName,OBJPROP_COLOR,eColor);   
   //установим текст
   if(ObjectGetString(eChartId,eName,OBJPROP_TEXT)!=eText) ObjectSetString(eChartId,eName,OBJPROP_TEXT,eText);
   }
 
Aleksei Stepanenko:

Этого не может быть, привязка идёт к углу графика и не зависит от масштаба графика. Что-то не так делаете, например, задаёте другие координаты.

Всё может быть) Если уменьшаешь ширину графика=открыть доп.окошки типа окна данных, то такие объекты сдвигаются вправо в неведомые дали за график))

Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Свойства графиков
Документация по MQL5: Константы, перечисления и структуры / Константы графиков / Свойства графиков
  • www.mql5.com
Признак отрисовки ценового графика. Если установлено значение false, то отключается отрисовка любых атрибутов ценового графика и устраняются все отступы по краям графика: шкалы времени и цены, строка быстрой навигации, метки событий Календаря, значки сделок, тултипы индикаторов и баров, подокна индикаторов, гистограммы объёмов и т.д. Значение...
 
Вот пример ***
 
Aleksey Mavrin:

Всё может быть) Если уменьшаешь ширину графика=открыть доп.окошки типа окна данных, то такие объекты сдвигаются вправо в неведомые дали за график))

Да, так оно и есть.

 
Сделайте привязку 
OBJPROP_CORNER

к верхним углам CORNER_LEFT_UPPER или CORNER_RIGHT_UPPER

 
К сожаление тоже самое!
 
Покажите, пожалуйста, код. Уже много раз я винил программу, но практически всегда, была виной собственная невнимательность :)
 

Спасибо большое!

Вот вызов функции:

CreateObject_Edit(Chart_ID,"Edit_Button",0,500,120,96,37,"Eur/USD",Var_Menu_Font_Edit,10,2,false,2,Var_Menu_Clr_EditText);

Вот сама функция:

bool CreateObject_Edit(const long             chart_ID=0,               // chart's ID
                       const string           name="Edit",              // object name
                       const int              sub_window=0,             // subwindow index
                       const int              x=0,                      // X coordinate
                       const int              y=0,                      // Y coordinate
                       const int              width=50,                 // width
                       const int              height=18,                // height
                       const string           text="Text",              // text
                       const string           font="Arial",             // font
                       const int              font_size=10,             // font size
                       const ENUM_ALIGN_MODE  align=ALIGN_CENTER,       // alignment type
                       const bool             read_only=false,          // ability to edit
                       const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // chart corner for anchoring
                       const color            clr=clrBlack,             // text color
                       const color            back_clr=clrWhite,        // background color
                       const color            border_clr=clrNONE,       // border color
                       const bool             back=false,               // in the background
                       const bool             selection=false,          // highlight to move
                       const bool             hidden=true,              // hidden in the object list
                       const long             z_order=0)                // priority for mouse click
  {
//--- reset the error value
   ResetLastError();
//--- create edit field
   if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))
     {
      Print(__FUNCTION__,
            ": failed to create \"Edit\" object! Error code = ",GetLastError());
      return(false);
     }
//--- set object coordinates
   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- set object size
   ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
   ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
//--- set the text
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- set text font
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- set font size
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- set the type of text alignment in the object
   ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align);
//--- enable (true) or cancel (false) read-only mode
   ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only);
//--- set the chart's corner, relative to which object coordinates are defined
   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- set text color
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set background color
   ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
//--- set border color
   ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
//--- display in the foreground (false) or background (true)
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of moving the label by mouse
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- hide (true) or display (false) graphical object name in the object list
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
   return(true);
  }

Еще раз ссылку на видео пошлю, как это все выглядить (не знаю, удалят ли ее или нет). 

Mt4
Mt4
  • streamable.com
Watch "Mt4" on Streamable.
 

Я видел Ваше видео. Вставил Вашу функцию в индикатор, всё в порядке, работает как надо.



Вот сам индикатор, попробуйте.

Файлы:
 
Да это работает. А разница есть, если это советник, а не индикатор?
Причина обращения: