Заливка объекта

 

Приветствую , уважаемые программисты!

"Для терминала МТ4."

Хотелось бы получить от Вас подсказку. Наткнулся на такой ньюанс...

1. создаю объект прямоугольник - сработало:

2. задаю свойства:

- стиль - сработало;

- толщина линии - сработало;

- цвет - сработало;

- заливка - не  хочет слушаться;

Ковырялся, ковырялся, в результате выяснил, что объект прямоугольник по умолчанию создается с установленной галочкой "Рисовать объект как фон". Пока эта галочка стоит прямоугольник не слушается  команды из программы, а если вручную убрать эту галочку из свойств объекта, то потом из программки можно управлять заливкой.

Вопрос такой, почему объекту не задается свойство "заливка" сразу? Что я делаю  не так и чего я не знаю?

Прошу помочь кто чем может!

ниже используемый код:

#property indicator_chart_window

int start()
  {
   long current_chart_id=ChartID();
   //
   string obj_name1="Rectangle1";
   //
   double   Price_Level_1     = 1296; //котировки золота
   double   Price_Level_2     = 1293;
   //
   datetime Left_Side_1      = Time[9];                                  
   datetime Right_Side_1     = Time[0] + PeriodSeconds() * 7;
   //
   const color            clr    = clrBeige;
   const ENUM_LINE_STYLE  style  = STYLE_DASH;
   const int              width  = 1;
   const bool             fill   = false;
   //
   ObjectCreate (current_chart_id, obj_name1, OBJ_RECTANGLE, 0, Left_Side_1, Price_Level_1, Right_Side_1, Price_Level_2);
   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_COLOR, clr);
   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_STYLE, style);
   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_WIDTH, width);
   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false); // не задается сразу
 
   return(0);

 

попробуйте

//+------------------------------------------------------------------+
void Prn_Rect_Label(string Name, int X, int Y, int width, int height, color CLR, int Corner, bool back)
   {
      ObjectDelete(0,Name);
      ObjectCreate(0,Name,OBJ_RECTANGLE_LABEL,0,0,0);
      ObjectSetInteger(0,Name,OBJPROP_XDISTANCE,X);
      ObjectSetInteger(0,Name,OBJPROP_YDISTANCE,Y);
      ObjectSetInteger(0,Name,OBJPROP_XSIZE,width);
      ObjectSetInteger(0,Name,OBJPROP_YSIZE,height);
      ObjectSetInteger(0,Name,OBJPROP_BGCOLOR,CLR);
      ObjectSetInteger(0,Name,OBJPROP_CORNER,Corner);
      ObjectSetInteger(0,Name,OBJPROP_BACK,back);
      return;
   }
 
А в чем фишка? Почему объект не реагирует на заливку без дополнительных манипуляций?
 
Renat Akhtyamov:

попробуйте

Нужно не удалять, а проверять на существование. Если нету, то создавать. А уже потом задавать параметры.
 
Так, почему же заливка не слушается?
 
Artyom Trishkin:
Нужно не удалять, а проверять на существование. Если нету, то создавать. А уже потом задавать параметры.

Согласен

сначала find

но если объект удаляется и создется вновь на каждом тике с одним и тем же именем, поиск  заведомо существующего объекта излишен
 
5211845:
Так, почему же заливка не слушается?

а если так (false --> true):

   ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, true); // не задается сразу
 

Не получается.  Уже попробовал такую функцию

ObjectSet (obj_name1, OBJPROP_FILL, true | false);

 
Вообще такой код должен работать? Может это у меня в терминале глюк какой то?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

 
5211845:
Вообще такой код должен работать? Может это у меня в терминале глюк какой то?

ObjectSetInteger (current_chart_id, obj_name1, OBJPROP_FILL, false);

Разумеется.

Детально сравните со своим кодом этот и поместите его в OnTimer(), т.к. тиков на выходных нет, либо временно запустите его в OnInit():

https://www.mql5.com/ru/docs/constants/objectconstants/enum_object/obj_rectangle

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_RECTANGLE
  • www.mql5.com
//| Cоздает прямоугольник по заданным координатам                    |               time1=0,                            price1=0,                         time2=0,                            price2=0,                        width=1,            //| Перемещает точку привязки прямоугольника                         |...
 

я на основании этого примера и писал свой код. Только понять не могу в чем разница. Только в том, что там есть окно для входных параметров.

А если мне не нужно это окно? если я просто хочу  создать объект уже с желаемыми параметрами. Такое возможно?

Причина обращения: