Как нажать на кнопку, не нажимая на других объектах

 

Привет всем! (проблема актуально только в MLQ4, в MQL5 - проверял - такой проблемы нет)


Есть пользовательский интерфейс индикатора, состоящий из нескольких кнопок, висящих поверх основного графика. Кнопки перекрашивают граф объекты и меняют их стиль.

У меня включена опция в MetaTrader "Выделять объект по одиночному клику" - очень удобно, так как работаю со множеством графических построений. Не могу от этого отказаться. 

Проблема: Когда нужно изменить, например, цвет линии

1) Выделяю нужную линию.

2) Нажимаю на кнопку нужного цвета.

3) При этом рядом с кнопкой есть другая линия, она тоже выделяется и тоже перекрашивается.

Так что получается, что хочу изменить одну линию, я меняется ещё одна - случайно-выделенная... 


Подскажите, плз, как это можно решить?

1) Перехватить клик в коде и отменить выделение? Если такое возможно, то как?

2) При mouse-over над областью интерфейса, принимать клик только по кнопкам. Как это можно реализовать?

3) Другими способами?..


Пробовал - не работает:

1) Сервис - Объекты - Примагничивание  - уменьшить значение

2) Повышать ZORDER кнопкам через ObjectSetInteger(0, name, OBJPROP_ZORDER, 1) и уменьшать его объектам. Клик получает только кнопка (проверял через обработчик события CHARTEVENT_OBJECT_CLICK), но при этом линия тоже выделяется и обрабатывается нажатием на кнопку (перекрашивается). Вопрос: каким образом линия всё же выделилась до того, как кнопка получила клик?..


Есть ли идеи?


Заранее спасибо!

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стили рисования - Константы индикаторов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Yevgen Drumachyk:

Подскажите, плз, как это можно решить?

3) Другими способами?..


Конечно же, лучшее решение - реализовывать пользовательский интерфейс на Canvas. 

 
Nikolai Semko #:

Конечно же, лучшее решение - реализовывать пользовательский интерфейс на Canvas. 

Так он же только для MQL5?

Если всё же его можно использовать для MQL4 - подскажите, плз, может статьи есть с примерами создания UI? (поискал, не нашел)

 
Yevgen Drumachyk #:

Так он же только для MQL5?

Если всё же его можно использовать для MQL4 - подскажите, плз, может статьи есть с примерами создания UI? (поискал, не нашел)

Класс CCanvas есть как для MQL5, так и для MQL4. Поэтому код для Canvas  будет работать на обеих платформах. 
Плохо искали. Очень много статей с ГУИ из Канваса и обсуждений на эту тему на форуме. 
Например, последние статьи Артема Тишкина с его DoEasy можете посмотреть. 
Или почитать ветку "Canvas -это Круто"
Причина обращения: