调整位图对象中的图像

OBJ_BITMAP_LABEL 类型的对象(基于屏幕坐标定位的图片面板)支持显示位图图像。位图图像指的是 BMP 图形格式:尽管理论上存在许多其他栅格格式(例如 PNG 或 GIF),但目前 MQL5 不支持这些格式,也不支持矢量格式。

字符串特性 OBJPROP_BMPFILE 允许为对象指定图像。该特性必须包含 BMP 文件或 资源的名称。

由于此对象支持双位状态切换(请参阅 OBJPROP_STATE),因此应针对它使用修饰符参数:索引 0 下设置“开启/按下”状态的图片,索引 1 下设置“关闭/释放”状态的图片。如果仅指定一张图片(无修饰符,等同于索引 0),该图片将用于两种状态。对象的默认状态为“关闭/释放”状态。

对象的大小会与图像大小相同,但可通过在 OBJPROP_XSIZE 和 OBJPROP_YSIZE 特性中指定较小值来更改对象大小:这种情况下,仅显示图像的一部分(详情见下一章节 帧设置)。

OBJPROP_BMPFILE 字符串的长度不得超过 63 个字符。该字符串不仅可以包含文件名,还可以包含文件路径。如果字符串以路径分隔符(正斜杠 '/’ 或双反斜杠 '\\’)开头,则会相对于terminal_data_directory/MQL5/目录搜索文件。否则,将相对于 MQL 程序所在的文件夹搜索文件。

例如,字符串 "\\Images\\euro.bmp"(或 "/Images/euro.bmp")指向的是MQL5/Images/euro.bmp目录下的文件。标准终端安装包在 MQL5 目录中包含 Images文件夹,并提供了 euro.bmpdollar.bmp 两个测试文件,因此该路径有效。如果指定字符串 "Images\\euro.bmp"(或 "Images/euro.bmp"),则对于从 MQL5/Scripts/MQL5Book/目录启动的脚本,意味着包含 euro.bmp 文件的 Images 文件夹应直接位于该目录下,即完整路径为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)
{
   // creating a panel
   const string name = ObjNamePrefix + "Bitmap";
   ObjectCreate(0nameOBJ_BITMAP_LABEL000);
   // set position
   ObjectSetInteger(0nameOBJPROP_XDISTANCEx);
   ObjectSetInteger(0nameOBJPROP_YDISTANCEy);
   // include images
   ObjectSetString(0nameOBJPROP_BMPFILE0imageOn);
   if(imageOff != NULLObjectSetString(0nameOBJPROP_BMPFILE1imageOff);
}
   
void OnStart()
{
   SetupBitmap("image"100100,
      "\\Images\\dollar.bmp""\\Images\\euro.bmp");
}

与上一节中脚本的结果相同,此处也可以点击图片对象,查看其在美元和欧元图像之间切换。