В некоторых приложениях требуется хранить звуки, картинки или другие ресурсы для дальнейшего их использования. Вы можете их хранить как рядом с программой, так и упаковать их в саму программу для целостности. В этой статье я опишу как упаковать различные типы файлов в исполняющую программу и затем вызвать их в процессе работы.
Файлы ресурсов Lazarus имеют расширение *.lrs Для того чтобы использовать файлы как ресурсы, нужно пересоздать их при помощи программы lazres. (По умолчанию: C:\Lazarus\Tools\)
Для работы с программой Lazres требуется открыть командную строку, на Windows это сmd.exe и прописать команду по шаблону:
lazres "имя файла ресурсов" "включаемые файлы (file1 file2 file3 ...)"
Например для упаковки картинки требуется, ввести команду: lazres leo.lrs Leopard.jpg
cd C:\lazarus\tools — для того чтобы не прописывать путь до программы LazRes, переходим в рабочий каталог данной программы.
lazres leo.lrs Leopard.jpg — leo.lrs произвольное имя, Leopard.jpg — имя картинки. Обратите внимание что для того чтобы не прописывать путь к картинке, она должна находится в рабочем каталоге командной строки, если можно так выразится. В нашем случае это C:\lazarus\tools.
Leopard.jpg ResourceName=’Leopard’ Type=’JPG’ — данная строка говорит нам об успешном преобразовании картинки в ресурс Lazarus.
Теперь для того чтобы включить наш ресурс в программу нужно в раздел initialization добавить {$I Leo.lrs} , а в раздел Uses добавить lResources
Так, теперь чтобы вызвать нашу картинку в программе требуется выполнить след. код:
Image1.Picture.LoadFromLazarusResource('Leopard'); //Указываем имя картинки без расширения
В итоге у меня получилось вот так:
Возможные ошибки:
При отсутствии файла, компилятор выдаст нам ошибку: Fatal: Cannot open include file «Имя ресурса»
Если у вас возникает ошибка Fatal: Syntax error, «BEGIN» expected but «identifier LAZARUSRESOURCES» found — то вы забыли добавить в раздел Uses lResources, или включаете ресурс не в разделе initialization
Если у вас все же не выходит, выкладываю исходники: Скачать 682Кб
А можно ли в программе обратно сохранить из ресурса в отдельный файл?
А почему нет? Через TMemoryStream например.
У меня возник такой вопрос: можно ли таким образом запаковать в exe файл локальное веб-приложение, например созданную книгу с анимацией и навигацией, состоящее из нескольких страниц и не требующих установленных веб-серверов?
Можно поробовать запоковать туда html странички, после чего открывать их браузером (http://devlaz.ru/chromium-in-lazarus/)
Подскажите пожалуйста, я преобразовал файл 1.txt (это двумерная матрица) в ресурс dataGaz.lrs.
Теперь как мне обратиться к данным этого ресурса.
раньше я писал
assignfile(переменная,’1.txt’ );
и дальше считывал и обрабатывал.
А как мне теперь связать с переменной данные из ресурса dataGaz.lrs