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

[Удален]
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:

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

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

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

[Удален]
Slava:

Вот мой эксперт, на котором я ещё раз проверил

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

Попробуйте мой индикатор. Суть, похоже, в установке zorder значения -1 + последующий ChartRedraw(). И одновременно, быстро менять zorder + выбирать/сбрасывать видимость объекта.

2361
Компилятор поднимает предупреждение 

integral constant overflow

на строку с произведением

ulong ms = 0;
ms = 40320*60000;

Если подставить результат произведения, то предупреждений нет

ulong ms = 0;
ms = 2419200000;
Alexey Kozitsyn:

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

Во всём виноват Чубайс...

А свойства посмотреть? Например OBJPROP_SELECTABLE

Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".