- Descripción de recursos mediante la directiva #resource
- Uso compartido de recursos de distintos programas MQL
- Variables de recursos
- Conectar indicadores personalizados como recursos
- Creación de recursos dinámicos: ResourceCreate
- Eliminar recursos dinámicos: ResourceFree
- Leer y modificar datos de recursos: RecursoReadImage
- Guardar imágenes en un archivo: ResourceSave
- Fuentes y salida de texto a recursos gráficos
- Aplicación de recursos gráficos en trading
Descripción de recursos mediante la directiva #resource
Para incluir un archivo de recursos en la versión compilada del programa, utilice la directiva #resource en el código fuente. La directiva tiene diferentes formas según el tipo de archivo. En cualquier caso, la directiva contiene la palabra clave #resource seguida de una cadena constante.
#resource "path_file_name" |
El comando #resource indica al compilador que incluya (en formato binario ex5) un archivo con el nombre y, opcionalmente, la ubicación especificados (en el momento de la compilación) en el programa ejecutable que se está generando. La ruta es opcional: si la cadena solo contiene el nombre del archivo, se busca en el directorio junto al código fuente compilado. Si hay una ruta en la cadena, se aplican las reglas descritas a continuación.
El compilador busca el recurso en la ruta especificada en la siguiente secuencia:
- Si la ruta está precedida por una barra invertida '\\' (debe ser doble, ya que una sola barra invertida es un carácter de control; en concreto, '\' se utiliza para nuevas líneas '\r', '\n' y tabulaciones '\t'), entonces el recurso se busca a partir de la carpeta MQL5 dentro del directorio de datos del terminal.
- Si no hay barra invertida, el recurso se busca en relación con la ubicación del archivo fuente en el que está registrado este recurso.
Tenga en cuenta que en las cadenas constantes con rutas de recursos, debe utilizar barras invertidas dobles como separadores. Aquí no se admiten las barras diagonales simples, a diferencia de las rutas en el sistema de archivos.
Por ejemplo:
#resource "\\Images\\euro.bmp" // euro.bmp is in /MQL5/Images/
|
Si el recurso se declara con una ruta relativa en el archivo de encabezado mqh, la ruta se considera relativa a este archivo mqh y no al archivo mq5 del programa que se está compilando.
Las subcadenas «..\\» y «:\» no están permitidas en la ruta del recurso.
Utilizando unas pocas directivas, puede, por ejemplo, poner todas las imágenes y sonidos necesarios directamente en el archivo ex5. Entonces, para ejecutar un programa de este tipo en otro terminal, no es necesario transferirlos por separado. En las siguientes secciones estudiaremos las formas programáticas de acceder a los recursos desde MQL5.
La longitud de la cadena constante «path_file_name» no debe superar los 63 caracteres. El tamaño del archivo de recursos no puede ser superior a 128 Mb. Los archivos de recursos se comprimen automáticamente antes de incluirlos en el ejecutable.
Una vez declarado el recurso mediante la directiva #resource, puede utilizarse en cualquier parte del programa. El nombre del recurso se convierte en la cadena constante especificada en la directiva sin una barra al principio (si existe), y debe añadirse un signo especial del recurso (dos dos puntos, «::») antes del contenido de la cadena.
A continuación presentamos ejemplos de recursos, con sus nombres en los comentarios.
#resource "\\Images\\euro.bmp" // resource name - ::Images\\euro.bmp
|
Más adelante en el código MQL se puede hacer referencia a estos recursos de la siguiente manera (aquí, solo conocemos ya las funciones ObjectSetString y PlaySound, pero hay otras opciones como RecursoReadImage, que se describirán en las secciones siguientes).
ObjectSetString(0, bitmap_name, OBJPROP_BMPFILE, 0, "::Images\\euro.bmp");
|
Debe tenerse en cuenta que al establecer una imagen de un recurso en los objetos OBJ_BITMAP y OBJ_BITMAP_LABEL, el valor de la propiedad OBJPROP_BMPFILE no puede modificarse manualmente (en el cuadro de diálogo de propiedades del objeto).
Tenga en cuenta que los archivos wav se establecen por defecto para la función PlaySound en relación con la carpeta Sounds (o sus subcarpetas) situada en el directorio de datos del terminal. Al mismo tiempo, los recursos (incluidos los de sonido), si se describen con una barra inicial en la ruta, se buscan dentro del directorio MQL5. Por lo tanto, en el ejemplo anterior, la cadena «\\Sounds\\thrill.wav» se refiere al archivo MQL5/Sounds/thrill.wav y no a Sounds/thrill.wav relativo al directorio de datos (sí existe el directorio Sounds con sonidos estándar del terminal).
La sencilla sintaxis de la directiva #resource comentada anteriormente solo permite describir recursos de imagen (formato BMP) y recursos de sonido (formato WAV). Si se intenta describir un archivo de otro tipo como recurso se producirá un error de «tipo de recurso desconocido».
Como resultado del procesamiento de la directiva #resource, los archivos se incrustan en el programa binario ejecutable y son accesibles mediante el nombre del recurso. Además, debe prestar atención a una propiedad especial de tales recursos, que es su disponibilidad pública desde otros programas (más al respecto en la siguiente sección).
MQL5 también admite otra forma de incrustar un archivo en un programa: en forma de una variable de recursos. Este método utiliza la sintaxis ampliada de la directiva #resource y permite conectar no solo archivos BMP o WAV, sino también otros, por ejemplo, texto o un array de estructuras.
Analizaremos un ejemplo práctico de conexión de recursos en un par de secciones.