CHARTEVENT_OBJECT_CLICK и CHARTEVENT_CLICK срабатывают одновременно

 

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

как разделить ?

нужен клик на объекте без события CHARTEVENT_CLICK

событие CHARTEVENT_CLICK нужно только при клике на графике вне объекта, на чистом графике

void OnChartEvent(const int id,         // идентификатор события   
                  const long& lparam,   // параметр события типа long 
                  const double& dparam, // параметр события типа double 
                  const string& sparam) // параметр события типа string 
  { 
//--- нажатие левой кнопкой мышки на графике 
   if(id==CHARTEVENT_CLICK) 
     { 
      Print("Координаты щелчка мышки на графике: x = ",lparam,"  y = ",dparam); 
     } 
//--- нажатие мышкой на графическом объекте 
   if(id==CHARTEVENT_OBJECT_CLICK) 
     { 
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'"); 
     } 
}
 
Iurii Tokman:

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

как разделить ?

нужен клик на объекте без события CHARTEVENT_CLICK

событие CHARTEVENT_CLICK нужно только при клике на графике вне объекта, на чистом графике

А если клик не на объекте, то активируется CHARTEVENT_OBJECT_CLICK или нет?

 
нет, не активируется
 

попробуйте поменять свойства OBJPROP_ZORDER (сделать побольше) и OBJPROP_BACK (чтобы был false)...

 
Maxim Kuznetsov:

попробуйте поменять свойства OBJPROP_ZORDER (сделать побольше) и OBJPROP_BACK (чтобы был false)...

приоритет действует для объектов
график все равно "кликается"

расположение на передней плане не помогло

 
Iurii Tokman:
нет, не активируется

Проверьте очерёдность событий. Если клик по объекту, то обрабатываем и выходим из... иначе проверяем клик по чарту.

 
Alexey Viktorov:

Проверьте очерёдность событий. Если клик по объекту, то обрабатываем и выходим из... иначе проверяем клик по чарту.

оба события всегда есть

придумал только частичное решение
сравнивать координаты клика

 

можно так попробовать  клики мыши разделить

void OnChartEvent(const int id,         // идентификатор события
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
{
   static ulong last_obj_click = GetMicrosecondCount();
//--- нажатие левой кнопкой мышки на графике
   if(id == CHARTEVENT_OBJECT_CLICK)
   {
      Print("Нажатие кнопки мышки на объекте с именем '" + sparam + "'");
      last_obj_click = GetMicrosecondCount();
   }
//--- нажатие мышкой на графическом объекте
   if(id == CHARTEVENT_CLICK && GetMicrosecondCount() - last_obj_click > 50)
   {
      Print("Координаты щелчка мышки на графике: x = ", lparam, "  y = ", dparam);
   }
}
 

У них отличается последний параметр, задействуйте sparam, чтобы взять только графический объект



if(id==CHARTEVENT_OBJECT_CLICK && sparam == nameObject) 
     { 
      Print("Нажатие кнопки мышки на объекте с именем '"+sparam+"'"); 
     } 
 
Igor Makanu:

можно так попробовать  клики мыши разделить

после первого нажатия существуют уже оба клика

 
Vasiliy Pushkaryov:

У них отличается последний параметр, задействуйте sparam, чтобы взять только графический объект



я перепробовал уже все к чему додумался, и это в том числе

частично удалось решить только с помощью сравнения координат кликов
все больше способов я не нашел

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