Еще раз. Взаимное расположение графических объектов (МТ4/МТ5) - страница 4

 
Ещё один момент. Независимо от того, какой приоритет у объекта (это и в четвёрке и в пятёрке) можно схватить объект через другой и перетаскивать оба. Очень неудобно, нужно исправить.
 

1. Создал фон: OBJ_RECTANGLE_LABEL (OBJPROP_ZORDER=0)

2. На него накидал несколько OBJ_BUTTON  (OBJPROP_ZORDER=1)

   Для всех объектов: OBJPROP_BACK=false (чтобы графики не лезли даже на фон) и  отключен режим перемещения кнопки мышью

3. Все  красиво пока не выключили терминал: фон сзади, кнопки нормально работают, при переключении таймфреймов, перекомпиляции проги и т.п. - все состояния кнопок сохраняются, кнопки нормально переключаются при необходимости и находятся сверху фона.

4. Перезагружаем терминал: УПС! кнопки под фоном.

Уважаемые господа разработчики, и что прикажете делать?

В OnDeinit() записывать в файл названия кнопок и их состояния (если успеет записаться за 2,5 сек), а при последующей инициализации индюка или эксперта, которая происходит не только  запуске терминала, удалять и вновь создавать объекты и присваивать им OBJPROP_STATE в соответствии с данными, считанными из файла?

Код причины деинициализации передается также в качестве параметра предопределенной функции OnDeinit(const int reason). Индикаторы принимают пока только код 1(REASON_REMOVE) и код 2(REASON_RECOMPILE). Так что если в экспертах можно задать такой процесс только при перезапуске терминала, то с индикаторами это не получится (будет каждый раз срабатывать).

Как то коряво это выглядит, но  ничего более умного меня не посетило... Одним словом - сплошные неудобства:(

 

Z-order != Z-index 

графэлементы выстаиваются терминалом по времени создания, попробуйте создайте сначала кнопки, а потом фон - увидите.

скорее всего вам придется все перерисовывать в любом случае 

 
FAQ:

Z-order != Z-index 

графэлементы выстаиваются терминалом по времени создания, попробуйте создайте сначала кнопки, а потом фон - увидите.

скорее всего вам придется все перерисовывать в любом случае 

Да, к сожалению... Z-order != Z-index 

Насчет времени я читал этот момент.

К сожалению, если в коде сначала идут кнопки, а потом фон - то сразу кнопки закрыты фоном. При перезагрузке терминала все становится наоборот в соответствии с временем создания - и фон получается на заднем плане. Ну почему так через задний проход сотворено?

Господа разработчики, неужели так и будем мучиться? Тема-то далеко не свежая...

 
foxmag:

Вынужден вернуться к теме о взаимном расположении графических объектов на графике торгового терминала МТ4 (МТ5).

В старой версии МТ4 (до build 509 включительно) существовало недокументированная возможность управления расположением графических объектов по слоям, то есть возможность задавать, какой из двух графических объектов перекрывает изображение другого объекта.

Эту возможность, известную еще как Z-последовательность, предоставляли встроенные в язык MQL4 ресурсы.

Суть ее состоит в том, что графические объекты (старые и вновь создаваемые) автоматически занимали слои в соответствии с алфавитным расположением своих имен, а именно, из двух графических объектов сверху располагался тот, чье имя находилось ближе к концу алфавита. Например, объект с именем «bobject“ располагался выше объекта „aobject“ и мог его перекрывать (частично или полностью) при их совмещении на графике.

Сегодня мы лишены такой возможности управления. В принудительном порядке объекты, созданные позже, находятся над всеми прежними объектами. При использовании многочисленных объектов это сравнимо с «порядком» в дамской сумочке, что недопустимо при создании качественных программных продуктов.

Приведу пример. Для упорядочивания графических объектов при открытии нового ордера есть один единственный способ. Мне пришлось бы уничтожать пару сотен объектов, а после этого их же создавать вновь (разумеется, вместе с объектами для нового ордера) в требуемой последовательности. Это весьма непривлекательный непрофессиональный подход. Кроме того, он не на 100% применим, поскольку у меня есть потребность располагать объекты по слоям не по времени их появления, а по типам (фон, текст, сигнальная линия и пр.)

Разработчики при создании новой модерной платформы лишили прикладных программистов одного из важнейших инструментов управления графическими объектами.

Как же так?

Подскажите тогда другой, пусть сложный (или очень сложный) способ упорядочения графических объектов. Без этого никак… Или верните Z-последовательность взад.

Спасибо за содействие. 

Просим!!! Времени много прошло...

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