Ошибка при замене функции ObjectSet(name, OBJPROP_CORNER, 1) на функцию ObjectSetInteger(0,name, OBJPROP_CORNER, 1)
При переходе на "новую запись" Вам нужно учесть, что привязка к углу "по-новому" теперь обеспечивается двумя свойствами.
Второе свойство - OBJPROP_ANCHOR
Старый вызов выставляет сразу оба свойства.
Если что-то работает, зачем это что-то менять? В пятом лучше причесать уже код под те стандарты.
Сделали очень удобно.
Осталась привязка к углу графика (OBJPROP_CORNER), но добавилось ещё и позиционирование угла объекта относительно точки привязки (OBJPROP_ANCHOR). Очень удобно и полезно.
ЗЫ. Кстати - не только угла объекта, но и его сторон. Теперь можно позиционировать объект по восьми узлам:
- верх-лево
- верх-право
- верх-центр
- низ-лево
- низ-право
- низ-центр
- право-центр
- лево-центр
При переходе на "новую запись" Вам нужно учесть, что привязка к углу "по-новому" теперь обеспечивается двумя свойствами.
Второе свойство - OBJPROP_ANCHOR
Старый вызов выставляет сразу оба свойства.
Если что-то работает, зачем это что-то менять? В пятом лучше причесать уже код под те стандарты.
Сделали очень удобно.
Осталась привязка к углу графика (OBJPROP_CORNER), но добавилось ещё и позиционирование угла объекта относительно точки привязки (OBJPROP_ANCHOR). Очень удобно и полезно.
ЗЫ. Кстати - не только угла объекта, но и его сторон. Теперь можно позиционировать объект по восьми узлам:
- верх-лево
- верх-право
- верх-центр
- низ-лево
- низ-право
- низ-центр
- право-центр
- лево-центр
Сделали очень удобно.
Осталась привязка к углу графика (OBJPROP_CORNER), но добавилось ещё и позиционирование угла объекта относительно точки привязки (OBJPROP_ANCHOR). Очень удобно и полезно.
ЗЫ. Кстати - не только угла объекта, но и его сторон. Теперь можно позиционировать объект по восьми узлам:
- верх-лево
- верх-право
- верх-центр
- низ-лево
- низ-право
- низ-центр
- право-центр
- лево-центр
9. центр-центр
Нумерация идёт от 0 до 8
9. центр-центр
Нумерация идёт от 0 до 8
С Вашего позволения уточню официальную информацию из документации:
Идентификатор | Значение константы | Описание |
ANCHOR_LEFT_UPPER | 0 | Точка привязки в левом верхнем углу |
ANCHOR_LEFT | 1 | Точка привязки слева по центру |
ANCHOR_LEFT_LOWER | 2 | Точка привязки в левом нижнем углу |
ANCHOR_LOWER | 3 | Точка привязки снизу по центру |
ANCHOR_RIGHT_LOWER | 4 | Точка привязки в правом нижнем углу |
ANCHOR_RIGHT | 5 | Точка привязки справа по центру |
ANCHOR_RIGHT_UPPER | 6 | Точка привязки в правом верхнем углу |
ANCHOR_UPPER | 7 | Точка привязки сверху по центру |
ANCHOR_CENTER | 8 | Точка привязки строго по центру объекта |
К моей теме. Действительно, совместное использование двух функций для OBJ_LABEL
ObjectSetInteger(0,name, OBJPROP_CORNER, CORNER_RIGHT_UPPER); ObjectSetInteger(0,name, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);
или, что то же самое,
ObjectSetInteger(0,name, OBJPROP_CORNER, 1); ObjectSetInteger(0,name, OBJPROP_ANCHOR, 6);
вместо одиночной функции (как это было в "старом" МТ4)
ObjectSet(name, OBJPROP_CORNER, 1);
исправило ошибку, которой посвящена эта тема.
Спасибо всем за обсуждение.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
fxsaber, 2019.05.02 01:22
#define CORNER_LEFT_LOWER 2 #define CORNER_LEFT_UPPER 0 #define CORNER_RIGHT_LOWER 3 #define CORNER_RIGHT_UPPER 1 #define CORNER(A) ((A) ? ((A) + 1) % 3 + 1 : 0) bool ObjectSet( const string name, const ENUM_OBJECT_PROPERTY_INTEGER property, const long value ) { return((property != OBJPROP_CORNER) ? ObjectSetInteger(0, name, property, value) : ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER(value)) && ObjectSetInteger(0, name, OBJPROP_ANCHOR, CORNER(value) << 1)); } #undef CORNER

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При переходе к "пятерочному" стандарту в "четверке" (а это нужно, чтобы меньше мороки было при переводе советника на "пятерку") все мной использованные новые функции графических объектов (положение объекта, цвет и пр.) работают безукоризненно. В том числе функция, определяющая привязку к левому верхнему углу окна, то есть функция
ObjectSetInteger(0,name, OBJPROP_CORNER, 0) вместо
ObjectSet(name, OBJPROP_CORNER, 0) .
Лишь замена
ObjectSet(name, OBJPROP_CORNER, 1) на функцию
ObjectSetInteger(0,name, OBJPROP_CORNER, 1)
- привязка к правому верхнему углу - приводит к тому, что объекты располагаются так, как будто бы у них одинаковые координаты (что, конечно, не так); они накладываются друг на друга.
Использование вместо 1 (единички) "пятерочной" константы CORNER_RIGHT_UPPER (воспринимается без проблем) ничего не меняет.
Ниже для ясности привожу картинки.
ПРАВИЛЬНО - ObjectSet(name, OBJPROP_CORNER, 1)
НЕПРАВИЛЬНО - ObjectSetInteger(0,name, OBJPROP_CORNER, 1)
По-моему, это "головоломка" для уважаемых разработчиков.