Как сдвинуть графический объект в заданную сторону?

 

Добрый день. Я пишу класс с некоторыми статическими функциями. В общем-то, всё работает как нужно, но что-то не то с функциями смещения объектов на графике. Вот например, функция, которая отрисовывает линию по 2 точкам:

//==================================================================================================================================================================================
// Отрисовывает линию по двум точкам. ==============================================================================================================================================
void Draw :: line(string objName,                     // Название объекта
                  const datetime time1,               // Время 1-ой точки
                  const double price1,                // Цена 1-ой точки
                  const datetime time2,               // Время 2-ой точки
                  const double price2,                // Цена 2-ой точки
                  const ENUM_LINE_STYLE lineStyle,    // Стиль лишнии
                  const int lineWidth,                // Ширина трендовой линии
                  const color lineColor,              // Цвет трендовой линии
                  const bool isItRay = false) {       // Линия является лучом?
//---
  objName += "_" + TimeToString(time1, TIME_DATE|TIME_MINUTES) + TimeToString(time2, TIME_DATE|TIME_MINUTES);

  if (!ObjectCreate(0, objName, OBJ_TREND, 0, time1, price1, time2, price2)) {
    writeLog(MESSAGE_ERROR, __FUNCTION__ + " { Не удалось создать объект типа 'OBJ_TREND' }");
    writeLog(MESSAGE_ERROR, __FUNCTION__ + " { _LastError = '" + iToS(_LastError) + "' }");
  }
  ObjectSetInteger(0, objName, OBJPROP_STYLE, lineStyle);
  ObjectSetInteger(0, objName, OBJPROP_WIDTH, lineWidth);
  ObjectSetInteger(0, objName, OBJPROP_COLOR, lineColor);
  ObjectSetInteger(0, objName, OBJPROP_RAY_RIGHT, isItRay);
  ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 1300);
  ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 1300);

//---
  ChartRedraw();
}

Функцией пользовался несколько раз. Сегодня решил добавить функционал смещения. Добавил последние 2 функции:

  ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 1300);
  ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 1300);

Объекты не смещаются.. Вертикальные линии как находились в определённом месте, так там и находятся.Что не так? Этот функионал вообще работает?

 
Виктор Демихов:

Добрый день. Я пишу класс с некоторыми статическими функциями. В общем-то, всё работает как нужно, но что-то не то с функциями смещения объектов на графике. Вот например, функция, которая отрисовывает линию по 2 точкам:

Функцией пользовался несколько раз. Сегодня решил добавить функционал смещения. Добавил последние 2 функции:

Объекты не смещаются.. Вертикальные линии как находились в определённом месте, так там и находятся.Что не так? Этот функионал вообще работает?

Если речь идет об объекте "Трендовая линия", то для нее не невозможно задать координаты в пикселях. Трендовая строится исключительно в координатах цена/время. По пикселям строятся объекты типа "Текстовая метка" (OBJ_LABEL), кнопка (OBJ_BUTTON).

 
Ihor Herasko:

Если речь идет об объекте "Трендовая линия", то для нее не невозможно задать координаты в пикселях. Трендовая строится исключительно в координатах цена/время. По пикселям строятся объекты типа "Текстовая метка" (OBJ_LABEL), кнопка (OBJ_BUTTON).

Да, вы правы. Проще изначально задать координаты для трендовые линий. Хотя, по сути, странно всё-равно. Ведь таким образом и любой другой объект типа метки, кнопок, квадратов и тд, тоже можно изначально разместить, там где нужно.
 
Виктор Демихов:
Да, вы правы. Проще изначально задать координаты для трендовые линий. Хотя, по сути, странно всё-равно. Ведь таким образом и любой другой объект типа метки, кнопок, квадратов и тд, тоже можно изначально разместить, там где нужно.

Вы имеете в виду при создании? Нет, при создании объектов, координаты которых указываются в пикселях, задать их местоположение невозможно, т. к. в функции ObjectCreate() аргументы типа цена и время (double и datetime), а для пикселей нужен int. Вот для этого и нужны OBJPROP_XDISTANCE и OBJPROP_YDISTANCE.

 
Ihor Herasko:

Вы имеете в виду при создании? Нет, при создании объектов, координаты которых указываются в пикселях, задать их местоположение невозможно, т. к. в функции ObjectCreate() аргументы типа цена и время (double и datetime), а для пикселей нужен int. Вот для этого и нужны OBJPROP_XDISTANCE и OBJPROP_YDISTANCE.

По сути, времени открытия и индекса баров достаточно, чтобы отрисовать луч или отрезок. Я это имел ввиду. А пиксели мне не интересны. Это уже другое..
Причина обращения: