Настройка изображений в объектах-картинках

Объекты типа OBJ_BITMAP_LABEL (панель с картинкой, позиционируемая в экранных координатах) позволяют отображать растровые картинки. Под растровыми картинками понимается графический формат BMP: хотя в принципе существует множество других растровых форматов (например, PNG или GIF), они в MQL5 на данный момент не поддерживаются, как и векторные.

Указать изображение для объекта позволяет строковое свойство OBJPROP_BMPFILE. Оно должно содержать имя BMP-файла или ресурса.

Поскольку данный объект поддерживает возможность двухпозиционного переключения состояния (см. OBJPROP_STATE), для него следует использовать параметр-модификатор: под индексом 0 задается картинка для состояния "включено"/"нажато", а под индексом 1 — для состояния "выключено"/"отжато". Если задать только одну картинку (без модификатора, что эквивалентно 0), она будет использоваться для обоих состояний. Напомним, что по умолчанию состояние объекта — "выключено".

Размер объекта становится равным размеру картинки, но его можно изменить, указав в свойствах OBJPROP_XSIZE и OBJPROP_YSIZE меньшие значения: при этом выводится лишь часть изображения (подробности см. в следующем разделе о кадрировании).

Длина строки OBJPROP_BMPFILE не должна превышать 63 символа. Она может содержать не только имя файла, но и путь к нему. Если строка начинается с символа-разделителя пути (прямая косая черта '/' или двойная обратная '\\'), то файл ищется относительно каталога_данных_терминала/MQL5/. В противном случае файл ищется относительно папки, в которой находится MQL-программа.

Например, строка "\\Images\\euro.bmp" (или "/Images/euro.bmp") ссылается на файл в каталоге MQL5/Images/euro.bmp. В стандартной поставке терминала в папке MQL5 действительно существует папка Images, а в ней — пара тестовых файлов euro.bmp и dollar.bmp, так что путь является рабочим. Если же задать строку "Images\\euro.bmp" или ("Images/euro.bmp"), то это будет предполагать, например, для скрипта, запущенного из MQL5/Scripts/MQL5Book/, что папка Images с файлом euro.bmp должна находиться непосредственно там, то есть общий путь получится MQL5/Scripts/MQL5Book/Images/euro.bmp. Такого файла в нашей книге нет, а это привело бы к ошибке загрузки изображения. Однако такая схема расположения графических файлов рядом с программой имеет и свои плюсы: проще контролировать сборку, и не возникает путаницы с перемешанными картинками разных программ.

Скрипт ObjectBitmap.mq5 создает на графике панель с картинкой и назначает ей два изображения: "\\Images\\dollar.bmp" и "\\Images\\euro.bmp".

#include "ObjectPrefix.mqh"
   
void SetupBitmap(const string buttonconst int xconst int y,
   const string imageOnconst string imageOff = NULL)
{
   // создаем панель
   const string name = ObjNamePrefix + "Bitmap";
   ObjectCreate(0nameOBJ_BITMAP_LABEL000);
   // настраиваем позицию
   ObjectSetInteger(0nameOBJPROP_XDISTANCEx);
   ObjectSetInteger(0nameOBJPROP_YDISTANCEy);
   // подключаем изображения
   ObjectSetString(0nameOBJPROP_BMPFILE0imageOn);
   if(imageOff != NULLObjectSetString(0nameOBJPROP_BMPFILE1imageOff);
}
   
void OnStart()
{
   SetupBitmap("image"100100,
      "\\Images\\dollar.bmp""\\Images\\euro.bmp");
}

Как и в случае результата работы скрипта из предыдущего раздела, здесь вы тоже можете пощелкать мышью по объекту-картинке и убедиться, что она переключается с изображения доллара на евро и обратно.