Я нажал кнопку, и она работала хорошо. Но когда я нажимаю на поле редактирования, иногда оно вызывает событие кнопки и печатает сообщение «Купить кликнул». Но я не нажимал.
Проблема в этом участке кода:
if(id == CHARTEVENT_OBJECT_CLICK) { if(sparam == name_append + "buy") { Print("Buy Clicked"); ObjectSetInteger(0, name_append + "buy", OBJPROP_STATE, false); } } else { if( Buy_Coords[0][0] <= lparam && lparam <= Buy_Coords[1][0] && Buy_Coords[0][1] <= dparam && dparam <= Buy_Coords[1][1] ) { Print("Buy Clicked"); } }
Во-первых, блок else будет срабатывать при любом событии графика, отличном от CHARTEVENT_OBJECT_CLICK. То есть уже на этом этапе следует еще раз определить тип полученного события. В данном случае это CHARTEVENT_CLICK.
Во-вторых, проверка координат клика неправильная. Там везде знаки <=. Половина из них должна быть >=.
Проблема в этом участке кода:
Во-первых, блок else будет срабатывать при любом событии графика, отличном от CHARTEVENT_OBJECT_CLICK. То есть уже на этом этапе следует еще раз определить тип полученного события. В данном случае это CHARTEVENT_CLICK .
Во-вторых, проверка координат клика неправильная. Там везде знаки <=. Половина из них должна быть >=.
Пожалуйста, не могли бы вы изменить мой пример и проверить его один раз. Потому что я думаю, что знаки верны.
Есть ли решение моей проблемы? Я все еще жду.
Я ведь указал на вариант решения...
Сделал вот так и никаких проблем нет:
void OnTimer() { if(ObjectGetInteger(0, name_append + "buy", OBJPROP_STATE) == true) { Print(__FUNCTION__, ", Buy Clicked"); ObjectSetInteger(0, name_append + "buy", OBJPROP_STATE, false); } } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // event ID const long& lparam, // long type event parameter const double& dparam, // double type event parameter const string& sparam // string type event parameter ) { if(id == CHARTEVENT_OBJECT_CLICK) { if(sparam == name_append + "buy") { Print(__FUNCTION__, ", Buy Clicked, id: ", id); ObjectSetInteger(0, name_append + "buy", OBJPROP_STATE, false); } } if(id == CHARTEVENT_CLICK) { Print("lparam: ", lparam, ", dparam: ", dparam, ", x0: ", Buy_Coords[0][0], ", x1: ", Buy_Coords[1][0], ", y0: ", Buy_Coords[0][1], ", y1: ", Buy_Coords[1][1]); if( Buy_Coords[0][0] <= lparam && lparam <= Buy_Coords[1][0] && Buy_Coords[0][1] <= dparam && dparam <= Buy_Coords[1][1] ) Print(__FUNCTION__, ", Buy Clicked, id: ", id); } }
Заметьте, что еще добавил в распечатку имя функции, из которой происходит вывод сообщения в лог. Это поможет понять, где именно происходит ложное срабатывание, если оно все еще имеет место быть. По крайней мере, мне не удается вызвать ложное сообщение о клике на кнопку.
P. S. Скорее всего, в полном коде Вы используете слежение за перемещением мыши (CHART_EVENT_MOUSE_MOVE=true). В этом случае как раз и происходит ложное срабатывание, т. к. тип события дополнительно не проверен.Я ведь указал на вариант решения...
Сделал вот так и никаких проблем нет:
Заметьте, что еще добавил в распечатку имя функции, из которой происходит вывод сообщения в лог. Это поможет понять, где именно происходит ложное срабатывание, если оно все еще имеет место быть. По крайней мере, мне не удается вызвать ложное сообщение о клике на кнопку.
P. S. Скорее всего, в полном коде Вы используете слежение за перемещением мыши (CHART_EVENT_MOUSE_MOVE=true). В этом случае как раз и происходит ложное срабатывание, т. к. тип события дополнительно не проверен.Спасибо за обновление. Я обязательно отмечу это и применю к своему коду.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
У меня есть следующий код:
Выход =
Я нажал кнопку, и она работала хорошо. Но когда я нажимаю на поле редактирования, иногда оно вызывает событие кнопки и печатает сообщение «Купить кликнул». Но я не нажимал.
Я обнаружил, что есть некоторые проблемы с кодом, когда я пытаюсь поймать событие кнопки в функции OnChartEvent() в другой части. Координаты, которые я использую, могут не совпадать.
Пожалуйста, помогите мне пройти через это. Я добавил это еще, потому что есть время, когда много линейных объектов перекрываются с кнопкой, и события не могут быть выполнены, поэтому я подумал об использовании координат диаграммы кнопки, если что-то нажато. Если координаты являются координатами кнопки покупки, то это должно вызвать событие покупки. Но иногда срабатывает кнопка, когда я нажимаю на поле редактирования.
Я хочу знать, есть ли способ получить событие щелчка на кнопке «Купить», не нажимая ее, если есть объект, перекрывающий кнопку. Нажатие кнопки не выполняется при наличии перекрывающихся объектов в тестере или в реальном режиме.
Помогите мне исправить это, пожалуйста.