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

 

Кто-нибудь может подсказать мне пример с Z_Order от HLINE?

Я хочу знать, как работать с Z-порядком объекта. Я не нашел примеров. пожалуйста помоги.

Создайте две строки и скажите мне, как я могу использовать z-порядок.

 
Нету возможности изменить порядок расположения объектов в глубину, есть только изменение приоритета на получение события.
Нужного эффекта можно добиться пересозданием объектов.
 
Aliaksandr Hryshyn:
Нету возможности изменить порядок расположения объектов в глубину, есть только изменение приоритета на получение события.
Нужного эффекта можно добиться пересозданием объектов.

Пересоздавать необязательно.

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

 
Slava:

Пересоздавать необязательно.

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

Не знал, такого в справке нету
 
Я ожидал простого примера. Это было бы более полезно для понимания, потому что я много чего пробовал с Z-порядком. Но все напрасно.
 
jaffer wilson:
Я ожидал простого примера. Это было бы более полезно для понимания, потому что я много чего пробовал с Z-порядком. Но все напрасно.

Что не получается? Для горизонтальной линии Z-ордер нормально выставляется.

Попробуйте простой эксперт

//+------------------------------------------------------------------+
//|                                                   TestZOrder.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)
     {
      long zorder=ObjectGetInteger(0,sparam,OBJPROP_ZORDER);
      PrintFormat("%s object clicked  lparam=%I64d  dparam=%.16g  zorder=%I64d",sparam,lparam,dparam,zorder);
      zorder=1-zorder;
      ObjectSetInteger(0,sparam,OBJPROP_ZORDER,zorder);
      zorder=ObjectGetInteger(0,sparam,OBJPROP_ZORDER);
      PrintFormat("%s zorder set to %I64d",sparam,zorder);
     }
  }
//+------------------------------------------------------------------+

Понажимайте мышкой на разных объектах, понаблюдайте тултипы объектов, смотрите журнал экспертов

 
Slava:

Что не получается? Для горизонтальной линии Z-ордер нормально выставляется.

Попробуйте простой эксперт

Понажимайте мышкой на разных объектах, понаблюдайте тултипы объектов, смотрите журнал экспертов

Хороший пример - Спасибо! теперь задумался, куда бы это применить.

Файлы:
TestZOrder.PNG  97 kb
 
Slava :

Что не получается? Для горизонтальной линии Z-ордер нормально выставляется.

Попробуйте простой эксперт

Понажимайте мышкой на разных объектах, понаблюдайте тултипы объектов, смотрите журнал экспертов

Спасибо за пример. Но я ожидал ответа в плане HLine. Но я полагаю, что HLine не поддерживает Z Order, как вы упомянули.

 
jaffer wilson:

Спасибо за пример. Но я ожидал ответа в плане HLine. Но я полагаю, что HLine не поддерживает Z Order, как вы упомянули.

В примере ест HLine, если вы имеете в виду горизонтальную линию.

Если у линии z-ордер 0 а у прямоугольника z-ордер 1, то линия недоступна в пределах прямоугольника. И наоборот. Если у линии z-ордер 1, а у прямоугольника z-ордер 0, то линия доступна.

Поводите мышкой по графику и пощёлкайте левой кнопкой

 
Slava:

Пересоздавать необязательно.

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

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

 
Slava:

В примере ест HLine, если вы имеете в виду горизонтальную линию.

Если у линии z-ордер 0 а у прямоугольника z-ордер 1, то линия недоступна в пределах прямоугольника. И наоборот. Если у линии z-ордер 1, а у прямоугольника z-ордер 0, то линия доступна.

Поводите мышкой по графику и пощёлкайте левой кнопкой

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