Ошибки, баги, вопросы - страница 2701

 
Slava:
Примерные координаты первого прямоугольника и второго прямоугольника? Они одинаковые?
Первый прямоугольник это подложка. Просто фон. На весь экран. 
Второй прямоугольник это столбик. Он находится на первом прямоугольнике. 
Я завтра постараюсь все показать. 
 
Slava:

Не воспроизводится.

Вы не дали никаких шагов для воспроизведения

А что Вы делали? 

Ок. Еще раз.

1. Создать графический объект, например, прямоугольник. Создать руками;

2. Изменить программно его свойство OBJPROP_ZORDER на значение 1;

3. Получить описанную мной ерунду.

Код изменения свойства по нажатию клавиши выглядит так. 

if( lparam == KEY_Z )
{
//--- Получаем свойство приоритета клика
int zorder = (int)ObjectGetInteger( 0, _name, OBJPROP_ZORDER );
//--- Меняем свойство приоритета клика
zorder = ( zorder == 0 ) ? 1 : 0;
//--- Устанавливаем новое свойство приоритета
ObjectSetInteger( 0, _name, OBJPROP_ZORDER, zorder );
} 
Имя объекта _name предварительно сохраняется путем выбора (кликом мыши) объекта на графике. 
 
Alexey Kozitsyn:

А что Вы делали? 

Ок. Еще раз.

1. Создать графический объект, например, прямоугольник. Создать руками;

2. Изменить программно его свойство OBJPROP_ZORDER на значение 1;

3. Получить описанную мной ерунду.

Код изменения свойства по нажатию клавиши выглядит так. 

Имя объекта _name предварительно сохраняется путем выбора (кликом мыши) объекта на графике. 

Создал руками графический объект горизонтальной линии.

Программно из скрипта изменил z-order

Вижу, что тултип появляется.


Создал руками графический объект прямоугольник (именно прямоугольник, привязанный у ценам - временам, а не OBJ_RECTANGLE_LABEL)

Программно из аналогичного скрипта изменил z-order

Вижу, что тултип появляется


Значит, Вы что-то недоговорили

 
Slava:

Создал руками графический объект горизонтальной линии.

Программно из скрипта изменил z-order

Вижу, что тултип появляется.


Создал руками графический объект прямоугольник (именно прямоугольник, привязанный у ценам - временам, а не OBJ_RECTANGLE_LABEL)

Программно из аналогичного скрипта изменил z-order

Вижу, что тултип появляется


Значит, Вы что-то недоговорили

Ок, перепроверю еще раз.

На билде 2361 проверяли?

Обновлено.

Перепроверил. Проблема остается. 

Попробуйте так: возьмите мой индикатор, создайте прямоугольник (который OBJ_RECTANGLE) на ТФ М1. Кликните на нем мышью, затем несколько раз нажмите z. В логе увидите, что zorder стал равен -1, 0, 1. Затем кликните по графику мимо этого прямоугольника. Потом попробуйте увидеть его тултип, выделить его.

Вероятно, дело в установке объекту zorder = -1. До этого думал, что проблема в значении 1. Извиняюсь.

Файлы:
 
Alexey Kozitsyn:

Перепроверил. Проблема остается. 

Попробуйте так: 

Сейчас гор. линии по умолчанию создаются выделенными (без возможности снять выделение кликом мыши) + без подсветки тултипов на любом графике... Что-то сломалось. Индикатора на графике уже нет.

 
Alexey Kozitsyn:

Ок, перепроверю еще раз.

На билде 2361 проверяли?

Обновлено.

Перепроверил. Проблема остается. 

Попробуйте так: возьмите мой индикатор, создайте прямоугольник (который OBJ_RECTANGLE) на ТФ М1. Кликните на нем мышью, затем несколько раз нажмите z. В логе увидите, что zorder стал равен -1, 0, 1. Затем кликните по графику мимо этого прямоугольника. Потом попробуйте увидеть его тултип, выделить его.

Вероятно, дело в установке объекту zorder = -1. До этого думал, что проблема в значении 1.

Похоже, дело в ChartRedraw(). Еще лучше воспроизводится, когда зацепите прямоугольник для работы и будете вперемешку нажимать на нем левой кнопкой и клавишу z. Таким образом этот объект становится "мертвым". Если позже создать другой прямоугольник - все норм.

 
Slava:

Что делать, когда нельзя ЛКМ снять выделение с гор. линий графика? Мешает...

 
Alexey Kozitsyn:

Похоже, дело в ChartRedraw(). Еще лучше воспроизводится, когда зацепите прямоугольник для работы и будете вперемешку нажимать на нем левой кнопкой и клавишу 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"
//+------------------------------------------------------------------+
//| 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,120);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_XSIZE,250);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_YSIZE,150);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BGCOLOR,clrNONE);
   ObjectSetInteger(0,OBJECT_NAME2,OBJPROP_BORDER_TYPE,BORDER_FLAT);
   ObjectSetString(0,OBJECT_NAME2,OBJPROP_TOOLTIP,OBJECT_NAME2);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   ObjectDelete(0,OBJECT_NAME1);
   ObjectDelete(0,OBJECT_NAME2);
  }
//+------------------------------------------------------------------+
//| 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);
     }
  }
//+------------------------------------------------------------------+

Всё штатно, тултипы выводятся согласно zorder

 
Alexey Kozitsyn:

Что делать, когда нельзя ЛКМ снять выделение с гор. линий графика? Мешает...

Что значит нельзя?

Давайте подробности!

 
Slava:

Что значит нельзя?

Давайте подробности!

Дак... вот... экспериментировал с индикатором из предыдущего поста. И.. что-то сломалось. Да так, что сейчас при создании гор. линии она выделена, а это выделение нельзя убрать кликнув на линию мышкой дважды. Хоть затыкайся - не убирается выделение. На любом графике, даже пустом.

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