Рассмотрим вывод графического объекта прямоугольник. Всех остальных объектов это также касается.
Если выводится объект на переднем плане, то существует возможность выводить его в виде рамки. Или можно залить объект цветом.
Но иногда есть необходимость объект поместить на "задний" план. Чтобы при его прорисовке/перерисовке объект не выводился поверх других графических построений.
Вот только при выводе объекта на заднем плане вывод всегда производится с заливкой. А необходимо, чтобы была возможность и на заднем плане объект выводить в виде рамки.
Исправьте, пожалуйста. Мне кажется, это ошибочное построение.
ObjectCreate(chart_ID, name, OBJ_RECTANGLE_LABEL, 0, 0, 0); //--- ObjectSetInteger(chart_ID, name, OBJPROP_BACK, true); ObjectSetInteger(chart_ID, name, OBJPROP_BGCOLOR, ChartGetInteger(chart_ID, CHART_COLOR_BACKGROUND));
Спасибо. Попробую.
Почему выше написал?
Есть в документации примеры работы с прямоугольниками и другими объектами. ЗДесь я функцию переименовал для собственных нужд и добавил пару параметров в верхних двух строчках. В документации другое название функции.
bool LevelsCreate(const long chart_ID=0, // ID графика bool typeLevel=false, // импульсный или разворотный уровень int number=0, // номер уровня const string name="Rectangle", // имя уровня const int sub_window=0, // номер подокна datetime time1=0, // время первой точки double price1=0, // цена первой точки datetime time2=0, // время второй точки double price2=0, // цена второй точки const color clr=clrRed, // цвет уровня const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линий уровня const int width=1, // толщина линий уровня const bool fill=false, // заливка прямоугольника цветом const bool back=false, // на заднем плане const bool selection=true, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0) // приоритет на нажатие мышью { .............. //--- включим (true) или отключим (false) режим заливки уровня ObjectSetInteger(chart_ID,name,OBJPROP_FILL,fill); //--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ............. }
Казалось бы, достаточно заливки
OBJPROP_FILL
Когда
OBJPROP_BACK
=false, отсутствие заливки дает вывод рамки. А когда задаем = true - вывод объекта на заднем плане, то заливка не влияет. В любом случае на заднем плане прямоугольник будет залит цветом.
Это не нормально. Функция заливки по сути работает только когда объект выводится на переднем плане.
Попробую еще поменять местами эти две функции. Это просто для эксперимента.
Но, я так понимаю, функция задания, на каком плане выводить объект, не должна влиять на другие свойства объекта. В частности, на заливку объекта цветом.
Я знаю, что в языке MQL зарыто много таких нюансов. Что-то было исправлено при переходе на пятерку. Но все равно встречаются баги. Их надо исправлять.
Использование каких-то обходных методов программирования не гарантирует, что в дальнейшем эти обходы не приведут к непредсказуемым последствиям.
Например, в случае исправления багов.
Выводить панельку на передний план можно так
ObjectSetInteger(0, name, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS) ObjectSetInteger(0, name, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS)
Поэкспериментируйте с примером из документации https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle
У меня на основе этого примера код в программе.

- www.mql5.com

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Рассмотрим вывод графического объекта прямоугольник. Всех остальных объектов это также касается.
Если выводится объект на переднем плане, то существует возможность выводить его в виде рамки. Или можно залить объект цветом.
Но иногда есть необходимость объект поместить на "задний" план. Чтобы при его прорисовке/перерисовке объект не выводился поверх других графических построений.
Вот только при выводе объекта на заднем плане вывод всегда производится с заливкой. А необходимо, чтобы была возможность и на заднем плане объект выводить в виде рамки.
Исправьте, пожалуйста. Мне кажется, это ошибочное построение.