Ajustar imágenes en objetos bitmap

Los objetos de tipo OBJ_BITMAP_LABEL (un panel con una imagen situada en coordenadas de pantalla) permiten mostrar imágenes de mapa de bits. Por imágenes de mapa de bits se entiende el formato gráfico BMP: aunque en principio existen muchos otros formatos de ráster (por ejemplo, PNG o GIF), actualmente no se admiten en MQL5, igual que los vectoriales.

La propiedad de cadena OBJPROP_BMPFILE permite especificar una imagen para un objeto. Debe contener el nombre del archivo BMP o recurso.

Dado que este objeto admite la posibilidad de conmutación de estados en dos posiciones (véase OBJPROP_STATE), debe utilizarse un parámetro modificador para ello: una imagen para el estado «activado»/«pulsado» se establece en el índice 0, y el estado «desactivado»/«liberado» se establece en el índice 1. Si sólo especifica una imagen (sin modificador, que equivale a 0), se utilizará para ambos estados. El estado por defecto de un objeto es «desactivado»/«liberado».

El tamaño del objeto se hace igual al tamaño de la imagen, pero puede cambiarse especificando valores más pequeños en las propiedades OBJPROP_XSIZE y OBJPROP_YSIZE: en este caso, sólo se muestra una parte de la imagen (para más detalles, véase la siguiente sección sobre sincronización de tramas o frames).

La longitud de la cadena OBJPROP_BMPFILE no debe superar los 63 caracteres. Puede contener no sólo el nombre del archivo, sino también la ruta hacia él. Si la cadena comienza con un carácter separador de ruta (barra diagonal '/' o doble barra invertida '\\'), entonces el archivo se busca en relación a terminal_data_directory/MQL5/. De lo contrario, el archivo se busca en relación con la carpeta donde se encuentra el programa MQL.

Por ejemplo, la cadena «\\Images\euro.bmp» (o «/Images/euro.bmp») hace referencia a un archivo del directorio MQL5/Images/euro.bmp. El paquete estándar de entrega de terminales incluye la carpeta Images en el directorio MQL5, y hay un par de archivos de prueba euro.bmp y dollar.bmp, por lo que la ruta está en funcionamiento. Si especifica la cadena «Images\euro.bmp» o («Images/euro.bmp»), esto implicará, por ejemplo, para un script lanzado desde MQL5/Scripts/MQL5Book/, que la carpeta Images con el archivo euro.bmp debe estar ubicada directamente allí, es decir, toda la ruta será MQL5/Scripts/MQL5Book/Images/euro.bmp. No existe tal archivo en nuestro libro, y esto provocaría un error al cargar la imagen. No obstante, esta disposición de los archivos gráficos junto al programa tiene sus ventajas: es más fácil controlar el montaje y no hay confusión con imágenes mezcladas de distintos programas.

El script ObjectBitmap.mq5 crea un panel con una imagen en el gráfico y le asigna dos imágenes: «\\Images\\dollar.bmp» e «\\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");
}

Al igual que con el resultado del script de la sección anterior, aquí también puede hacer clic en el objeto de imagen y ver que cambia de la imagen del dólar a la del euro y viceversa.