- Описание ресурсов с помощью директивы #resource
- Разделяемое использование ресурсов разных MQL-программ
- Ресурсные переменные
- Подключение пользовательских индикаторов как ресурсов
- Динамическое создание ресурсов: ResourceCreate
- Удаление динамических ресурсов: ResourceFree
- Чтение и модификация данных ресурса: ResourceReadImage
- Сохранение изображений в файл: ResourceSave
- Шрифты и вывод текста в графические ресурсы
- Прикладное применение графических ресурсов в трейдинге
Разделяемое использование ресурсов разных MQL-программ
Имя ресурса — уникально во всем терминале. Позже мы научимся создавать ресурсы не на стадии компиляции (директивой #resource), а динамически с помощью функции ResourceCreate, но в любом случае ресурс объявляется в контексте создающей его программы, так что уникальность полного имени обеспечивается автоматически, за счет привязки к файловой системе (пути и имени конкретного ex5-файла).
Любая MQL-программа может не только сама содержать ресурсы и использовать их, но обращаться к ресурсам другой откомпилированной программы (ex5-файла). Это возможно при условии, когда использующая ресурс программа знает путь размещения и название другой программы, содержащей требуемый ресурс, а также имя этого ресурса.
Таким образом, терминал обеспечивает важное свойство ресурсов — их разделяемое использование: ресурсы из одного ex5-файла можно задействовать во многих других программах.
Для того чтобы использовать ресурс из стороннего ex5-файла, его нужно указать в виде "путь_имя_файла.ex5::имя_ресурса". Например, пусть в скрипте DrawingScript.mq5 указан ресурс-картинка в файле triangle.bmp:
#resource "\\Files\\triangle.bmp" |
Тогда его имя для использования в самом скрипте будет выглядеть как "::Files\\triangle.bmp".
Чтобы использовать этот же ресурс из другой программы, например, эксперта, нужно перед именем ресурса добавить путь к ex5-файлу скрипта относительно папки MQL5 каталога данных терминала и имя самого скрипта (в откомпилированном виде DrawingScript.ex5). Пусть скрипт лежит в стандартной папке MQL5/Scripts/, тогда обращение к картинке следует выполнять с помощью строки "\\Scripts\\DrawingScript.ex5::Files\\triangle.bmp". Расширение ".ex5" опционально.
Если при обращении к ресурсу другого ex5-файла путь к этому файлу не указан, то такой файл ищется в той же папке, где находится обратившаяся за ресурсом программа. Например, если предположить, что тот же советник находится в стандартной папке MQL5/Experts/ и делает запрос ресурса без указания пути (например, так — "DrawingScript.ex5::Files\\triangle.bmp"), то это приведет к поиску DrawingScript.ex5 в папке MQL5/Experts/.
За счет разделяемого использования ресурсов их динамическое создание и обновление можно применять для обмена данными между MQL-программами, причем это происходит прямо в памяти, и потому является хорошей альтернативой для файлов или глобальных переменных.
Обратите внимание, что для загрузки ресурса из MQL-программы не требуется её запускать: для чтения ресурсов достаточно самого наличия ex5-файла с ресурсами.
Важным исключением, когда разделение ресурса перестает работать, является его описание в виде ресурсной переменной.