Кто последний создан - тот и сверху.
Рисуйте канву последней и она будет сверху всех предыдущих объектов.
Кто последний создан - тот и сверху.
Рисуйте канву последней и она будет сверху всех предыдущих объектов.
Мне тоже интересно этот вопрос.
Если мы создаем объект например ObjectCreate(0,"ххх",OBJ_BUTTON,0,0,0), то при режиме OBJPROP_BACK,false, то кнопка над графиком, но всё равно остается под объектами терминала, такие как Sell, Buy и соединительная линия.
Хорошо что есть режим OBJPROP_ZORDER, который позволяет через мышку достать объект который находится под другими объектами.
Вот я специально уменьшил окно чарта, чтобы хорошо было видно что происходит. Думаю это надо исправить.
А как же быть с кнопками и полями ввода? Что бы они были на переднем плане их придётся каждый раз удалять и создавать заново?
Посмотрите реализацию панелей диалогов на базе CDialog.
При минимизации и разворачивании формы объекты не удаляются. Самый быстрый способ убедится в этом: пример из справки CBmpButton, а к самом классе CBmpButton в конструкторе и деструкторе разместить принт:
//+------------------------------------------------------------------+ //| Constructor | //+------------------------------------------------------------------+ CBmpButton::CBmpButton(void) : m_border(0), m_bmp_off_name(NULL), m_bmp_on_name(NULL), m_bmp_passive_name(NULL), m_bmp_active_name(NULL) { Print(__FUNCTION__); } //+------------------------------------------------------------------+ //| Destructor | //+------------------------------------------------------------------+ CBmpButton::~CBmpButton(void) { Print(__FUNCTION__); }
Сверните, разверните форму и проверьте уничтожаются ли объекты-кнопки?
Считаю, нужно ввести дополнительную функцию для этой цели: ObjectBringToTop(…). Потому что делать через OBJPROP_TIMEFRAMES - это во-первых, костыльно, а во вторых - довольно спорно и неоднозначно. Данная функция управляет видимостью объекта, но с какой стати меняется его z-порядок?
В качестве аналогии можно взять реализацию работы окон в Windows. Видимость окна определяется свойством WS_VISIBLE, но это не влияет на z-расположение. Окно просто видимо или невидимо, но находится на прежнем месте. А для поднятия окна наверх предназначена функция BringWindowToTop.
Соответственно должна быть предусмотрена и возможность узнать текущий z-порядок объекта.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не могу поставить, кнопки, поля ввода и окна, сделанные на основе CCanvas, на передний план, чтобы остальные графические объекты чарта не перекрывали их. В MQL4 я использовал следующий код и всё работало.
long tf = ObjectGetInteger(m_chart_id, m_objname, OBJPROP_TIMEFRAMES); if(ObjectSetInteger(m_chart_id, m_objname, OBJPROP_TIMEFRAMES, -1)) ObjectSetInteger(m_chart_id, m_objname, OBJPROP_TIMEFRAMES, tf);
Но в MQL5 этот код, очевидно, работать не хочет. В чем причина такого поведения объектов?