Скачать MetaTrader 5

Ошибка при замене функции ObjectSet(name, OBJPROP_CORNER, 1) на функцию ObjectSetInteger(0,name, OBJPROP_CORNER, 1)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
foxmag
572
foxmag  

При переходе к "пятерочному" стандарту в "четверке" (а это нужно, чтобы меньше мороки было при переводе советника на "пятерку") все мной использованные новые функции графических объектов (положение объекта, цвет и пр.) работают безукоризненно. В том числе функция, определяющая привязку к левому верхнему углу окна, то есть функция

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)

 

По-моему, это "головоломка" для уважаемых разработчиков. 

foxmag
572
foxmag  
Пробую обратить внимание на мою тему еще раз. Спасибо.
Slava
Модератор
6942
Slava  

При переходе на "новую запись" Вам нужно учесть, что привязка к углу "по-новому" теперь обеспечивается двумя свойствами.

Второе свойство - OBJPROP_ANCHOR

Старый вызов выставляет сразу оба свойства.

Vitalie Postolache
12429
Vitalie Postolache  
Если что-то работает, зачем это что-то менять? В пятом лучше причесать уже код под те стандарты.
Artyom Trishkin
Модератор
81578
Artyom Trishkin  
evillive:
Если что-то работает, зачем это что-то менять? В пятом лучше причесать уже код под те стандарты.

Сделали очень удобно.

Осталась привязка к углу графика (OBJPROP_CORNER), но добавилось ещё и позиционирование угла объекта относительно точки привязки (OBJPROP_ANCHOR). Очень удобно и полезно.

ЗЫ. Кстати - не только угла объекта, но и его сторон. Теперь можно позиционировать объект по восьми узлам:

  1. верх-лево
  2. верх-право
  3. верх-центр
  4. низ-лево
  5. низ-право
  6. низ-центр
  7. право-центр
  8. лево-центр
foxmag
572
foxmag  
stringo:

При переходе на "новую запись" Вам нужно учесть, что привязка к углу "по-новому" теперь обеспечивается двумя свойствами.

Второе свойство - OBJPROP_ANCHOR

Старый вызов выставляет сразу оба свойства.

Спасибо за дружественный ответ. Удачи!
foxmag
572
foxmag  
evillive:
Если что-то работает, зачем это что-то менять? В пятом лучше причесать уже код под те стандарты.
Спасибо за ответ, удачи!
foxmag
572
foxmag  
artmedia70:

Сделали очень удобно.

Осталась привязка к углу графика (OBJPROP_CORNER), но добавилось ещё и позиционирование угла объекта относительно точки привязки (OBJPROP_ANCHOR). Очень удобно и полезно.

ЗЫ. Кстати - не только угла объекта, но и его сторон. Теперь можно позиционировать объект по восьми узлам:

  1. верх-лево
  2. верх-право
  3. верх-центр
  4. низ-лево
  5. низ-право
  6. низ-центр
  7. право-центр
  8. лево-центр
Спасибо за подробности, весьма кстати. Удачи!
Slava
Модератор
6942
Slava  
artmedia70:

Сделали очень удобно.

Осталась привязка к углу графика (OBJPROP_CORNER), но добавилось ещё и позиционирование угла объекта относительно точки привязки (OBJPROP_ANCHOR). Очень удобно и полезно.

ЗЫ. Кстати - не только угла объекта, но и его сторон. Теперь можно позиционировать объект по восьми узлам:

  1. верх-лево
  2. верх-право
  3. верх-центр
  4. низ-лево
  5. низ-право
  6. низ-центр
  7. право-центр
  8. лево-центр

9. центр-центр

Нумерация идёт от 0 до 8

foxmag
572
foxmag  
stringo:

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);

исправило ошибку, которой посвящена эта тема.

Спасибо всем за обсуждение. 

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий