- Типы объектов и особенности указания их координат
- Объекты с привязкой ко времени и цене
- Объекты с привязкой к экранным координатам
- Создание объектов
- Удаление объектов
- Поиск объектов
- Обзор функций доступа к свойствам объектов
- Основные свойства объектов
- Координаты времени и цены
- Угол окна привязки и экранные координаты
- Определение точки привязки на объекте
- Управление состоянием объекта
- Приоритет объектов (Z-порядок)
- Настройка отображения объекта: цвет, стиль и рамка
- Настройки шрифта
- Поворот текста на произвольный угол
- Определение ширины и высоты объектов
- Видимость объектов в разрезе таймфреймов
- Назначение кода символа для метки
- Свойства лучей для объектов c прямыми линиями
- Управление нажатым состоянием объекта
- Настройка изображений в объектах-картинках
- Кадрирование (вывод части) изображения
- Свойства поля ввода: выравнивание и "только чтение"
- Ширина канала стандартного отклонения
- Настройка уровней в объектах с их поддержкой
- Дополнительные свойства Ганна, Фибоначчи и Эллиота
- Объект-график
- Перемещение объектов
- Получение времени или цены в заданных точках линий
Определение точки привязки на объекте
Объекты некоторых типов позволяют выбирать точку привязки. К числу таких типов относятся: текстовая метка (OBJ_TEXT) и растровая картинка (OBJ_BITMAP) с привязкой к котировкам, а также надпись (OBJ_LABEL) и панель с картинкой (OBJ_BITMAP_LABEL), позиционируемые в экранных координатах.
Для чтения и установки точки привязки следует использовать функции ObjectGetInteger и ObjectSetInteger со свойством OBJPROP_ANCHOR.
Все варианты выбора точки собраны в перечислении ENUM_ANCHOR_POINT.
Идентификатор |
Расположение точки привязки |
---|---|
ANCHOR_LEFT_UPPER |
В левом верхнем углу |
ANCHOR_LEFT |
Слева по центру |
ANCHOR_LEFT_LOWER |
В левом нижнем углу |
ANCHOR_LOWER |
Снизу по центру |
ANCHOR_RIGHT_LOWER |
В правом нижнем углу |
ANCHOR_RIGHT |
Справа по центру |
ANCHOR_RIGHT_UPPER |
В правом верхнем углу |
ANCHOR_UPPER |
Сверху по центру |
ANCHOR_CENTER |
Строго по центру объекта |
Точки наглядно показаны на изображении ниже, где на график нанесено несколько объектов-надписей.
Текстовые объекты OBJ_LABEL с разными точками привязки
Верхняя группа из 4-х надписей имеет одну и ту же пару координат (X,Y), однако из-за привязки к разным углам объекта, они расположены по разные стороны от точки. Похожая ситуация во второй группе из 4-х надписей, однако там привязка сделана к серединам разных сторон объектов. Наконец, внизу отдельно показана надпись с привязкой по её центру, так что точка находится внутри объекта.
Объекты кнопка (OBJ_BUTTON), прямоугольная панель (OBJ_RECTANGLE_LABEL), поле вводе (OBJ_EDIT) и объект-график (OBJ_CHART) имеют фиксированную точку привязки в левом верхнем углу (ANCHOR_LEFT_UPPER).
Некоторые графические объекты группы одиночных ценовых меток (OBJ_ARROW, OBJ_ARROW_THUMB_UP, OBJ_ARROW_THUMB_DOWN, OBJ_ARROW_UP, OBJ_ARROW_DOWN, OBJ_ARROW_STOP, OBJ_ARROW_CHECK) имеют 2 способа привязки своих координат, задаваемые идентификаторами другого перечисления — ENUM_ARROW_ANCHOR.
Идентификатор |
Расположение точки привязки |
---|---|
ANCHOR_TOP |
Сверху по центру |
ANCHOR_BOTTOM |
Снизу по центру |
Остальные объекты этой группы имеют предопределенные точки привязки: стрелки покупки (OBJ_ARROW_BUY) и продажи (OBJ_ARROW_SELL) — соответственно, посередине верхней и нижней стороны, а ценовые метки (OBJ_ARROW_RIGHT_PRICE, OBJ_ARROW_LEFT_PRICE) — слева и справа.
По аналогии со скриптом ObjectCornerLabel.mq5 из предыдущего раздела создадим скрипт ObjectAnchorLabel.mq5. В новой версии помимо перемещения надписи будем случайным образом менять точку привязки на ней.
Угол окна для привязки будет, как и раньше, выбирать пользователь при запуске скрипта.
input ENUM_BASE_CORNER Corner = CORNER_LEFT_UPPER; |
Мы выведем название угла на график в виде комментария.
void OnStart()
|
В бесконечном цикле в выбранные моменты генерируется одно из 9 возможных значений точки привязки.
ENUM_ANCHOR_POINT anchor = 0;
|
Название точки привязки становится текстовым содержимым надписи, вместе с текущими координатами.
ObjectSetString(0, name, OBJPROP_TEXT, EnumToString(anchor)
|
Прочие фрагменты кода остались практически неизменными.
Откомпилировав и запустив скрипт, обратите внимание, как надпись меняет свое положение относительно текущих координат (x,y) в зависимости от выбранной точки привязки.
Пока мы контролируем и предотвращаем выход за пределы окна непосредственно точки привязки. Однако объект имеет некоторые размеры, и потому сейчас может оказаться, что большая часть надписи обрезается. В дальнейшем, после изучения соответствующих свойств, мы займемся этой проблемой (см. пример ObjectSizeLabel.mq5 в разделе Определение ширины и высоты объектов).