Пример Z-порядка для объекта HLINE. - страница 2

 
Aliaksandr Hryshyn:

Попробовал вручную так сделать, не изменяется Z-ордер

Нет. В данном случае z-ордер ни при чём. И делать надо программно.

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

 
Aliaksandr Hryshyn:

Просим вас добавить такую возможность, изменение порядка отображения объектов

Про порядок отображения объектов я рассказал в своём предыдущем посте

 

Вот пример с изменением порядка отрисовки. Объект, на который жмакнешь мышкой, после этого отрисовывается последним. Это можно увидеть по тултипу и по записи в журнале экспертов, о том, какой объект получил событие (а получает в данном случае - верхний, то есть, последний в отрисовке)

//+------------------------------------------------------------------+
//|                                                TestDrawOrder.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#define OBJECT_NAME1 "RectangleLabel1"
#define OBJECT_NAME2 "RectangleLabel2"
#define OBJECT_NAME3 "HorizontalLine"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ObjectCreate(0,OBJECT_NAME1,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_XDISTANCE,100);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_YDISTANCE,100);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_XSIZE,300);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_YSIZE,200);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_BGCOLOR,clrNONE);
   ObjectSetInteger(0,OBJECT_NAME1,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetString(0,OBJECT_NAME1,OBJPROP_TOOLTIP,OBJECT_NAME1);
//---
   ObjectCreate(0,OBJECT_NAME2,OBJ_RECTANGLE_LABEL,0,0,0);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_XDISTANCE,250);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_YDISTANCE,125);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_XSIZE,400);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_YSIZE,250);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BGCOLOR,clrNONE);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetString(0,OBJECT_NAME2,OBJPROP_TOOLTIP,OBJECT_NAME2);
//---
   double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   ObjectCreate(0,OBJECT_NAME3,OBJ_HLINE,0,0,bid);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,OBJECT_NAME1);
   ObjectDelete(0,OBJECT_NAME2);
   ObjectDelete(0,OBJECT_NAME3);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   if(id==CHARTEVENT_OBJECT_CLICK)
     {
      PrintFormat("%s object clicked  lparam=%I64d  dparam=%.16g",sparam,lparam,dparam);
      ObjectSetInteger(0,sparam,OBJPROP_TIMEFRAMES,0);
      ChartRedraw();
      ObjectSetInteger(0,sparam,OBJPROP_TIMEFRAMES,0x001fffff);
     }
  }
//+------------------------------------------------------------------+
 

Не удаляются объекты у индикатора при закрытом рынке. Изменил ваш пример под индикатор.

У советников всё нормально. С событием деинициализации тоже всё хорошо

void OnDeinit(const int reason)
  {
   ObjectDelete(0,OBJECT_NAME1);
   ObjectDelete(0,OBJECT_NAME2);
   ObjectDelete(0,OBJECT_NAME3);
  }
Файлы:
Test1.mq5  4 kb
 
Aliaksandr Hryshyn:

Не удаляются объекты у индикатора при закрытом рынке. Изменил ваш пример под индикатор.

У советников всё нормально. С событием деинициализации тоже всё хорошо

Забыли обновить график вставить команду.
 
Vladimir Karputov:
Забыли обновить график вставить команду.

Сработало :)