Одновременное срабатывание CHARTEVENT_CLICK и CHARTEVENT_OBJECT_CLICK Как решить задачу?

 

Задача такая! При нажатии на кнопку Советник ожидает клика мышки на графике для модификации стоплосса используя координаты нажатия мышки на графике.

Проблема, при нажатии на кнопку сразу срабатывает и нажатие на графике в OnChartEvent, так что срабатывает клик мышки при                                      id == CHARTEVENT_CLICK

Пробовал запоминать кнопку в глобальные переменные при id = CHARTEVENT_OBJECT_CLICK и использовать если существует в глобальной переменной при id == CHARTEVENT_CLICK

Получается что переменная записывается и сразу используется и срабатывает при id== CHARTEVENT_CLICK.

Как можно решить задачу?

 
Igor Petrov:

Задача такая! При нажатии на кнопку Советник ожидает клика мышки на графике для модификации стоплосса используя координаты нажатия мышки на графике.

Проблема, при нажатии на кнопку сразу срабатывает и нажатие на графике в OnChartEvent, так что срабатывает клик мышки при                                      id == CHARTEVENT_CLICK

Пробовал запоминать кнопку в глобальные переменные при id = CHARTEVENT_OBJECT_CLICK и использовать если существует в глобальной переменной при id == CHARTEVENT_CLICK

Получается что переменная записывается и сразу используется и срабатывает при id== CHARTEVENT_CLICK.

Как можно решить задачу?

Проверил, это разные события

CHARTEVENT_CLICK = в любом месте на графике

CHARTEVENT_OBJECT_CLICK = только клик на графическом объекте

Сделайте так:

if(id==CHARTEVENT_OBJECT_CLICK && sparam!="ObjName") {
  ...
}
 

   

if(id==CHARTEVENT_CLICK && sparam != "stopMause")


 Вот этот код Срабатывает при нажатии на кнопке с name =  "stopMause"

 
Igor Petrov:

   


 Вот этот код Срабатывает при нажатии на кнопке с name =  "stopMause"

Да, только что проверил, не помогает даже установка флага и выход

 bool flag=true;
   if(id==CHARTEVENT_OBJECT_CLICK && sparam=="bpu_AUD") {
     flag=false;
     Alert("==");
     return;
   }
   if(id==CHARTEVENT_CLICK && flag) { 
     Alert(dparam);
    // Alert(sparam);
   }


Может что не так делаю

 
Vitaly Muzichenko:

Да, только что проверил, не помогает даже установка флага и выход


Может что не так делаю

Может флаг  на глобальный уровень, не в функции OnChartEvent .

 
Igor Petrov:

Может флаг  на глобальный уровень, не в функции OnChartEvent .

Пробуйте, у меня не пошло, всё-равно срабатывают 2 события одновременно

 
Vitaly Muzichenko:

Пробуйте, у меня не пошло, всё-равно срабатывают 2 события одновременно

Если клик по кнопке - запускаем ожидание. Если клик по графику и ожидание закончилось - искомое событие.
 
Igor Petrov:

Задача такая! При нажатии на кнопку Советник ожидает клика мышки на графике для модификации стоплосса используя координаты нажатия мышки на графике.

Проблема, при нажатии на кнопку сразу срабатывает и нажатие на графике в OnChartEvent, так что срабатывает клик мышки при                                      id == CHARTEVENT_CLICK

Пробовал запоминать кнопку в глобальные переменные при id = CHARTEVENT_OBJECT_CLICK и использовать если существует в глобальной переменной при id == CHARTEVENT_CLICK

Получается что переменная записывается и сразу используется и срабатывает при id== CHARTEVENT_CLICK.

Как можно решить задачу?

Два события идут одновременно в очередь, а клик на графике уже третье событие. Нужно "отсеять" второе, т.е. CHARTEVENT_CLICK когда клик на кнопке. Либо проверкой координат клика, если попадаем на кнопку - выход, можно попробовать просто пропускать один CHARTEVENT_CLICK,

но тогда важна очередность событий, вроде объект который выше на графике получает событие первее. 

 
Igor Petrov:

Задача такая! При нажатии на кнопку Советник ожидает клика мышки на графике для модификации стоплосса используя координаты нажатия мышки на графике.

Проблема, при нажатии на кнопку сразу срабатывает и нажатие на графике в OnChartEvent, так что срабатывает клик мышки при                                      id == CHARTEVENT_CLICK

Пробовал запоминать кнопку в глобальные переменные при id = CHARTEVENT_OBJECT_CLICK и использовать если существует в глобальной переменной при id == CHARTEVENT_CLICK

Получается что переменная записывается и сразу используется и срабатывает при id== CHARTEVENT_CLICK.

Как можно решить задачу?

а вот если события через switch проверять
при нажатии на кнопку включаем флаг что кнопка нажата и break
следующее событие контроль мыши и проверка этого флага

то данной особенности вообще не будет заметно