Sign in Join
Wiki copytemporary

Lazarus Resources/ru

한국어 · Deutsch · English · Español · Français · Русский

Введение

Файл ресурсов содержит данные, встраиваемые в исполняемый файл. Это могут быть изображения, строки, информация о версии, Manifest (Windows) и формы. Сюда включены данные, к которым программист может обратиться из кода. Использование ресурсов может быть удобно, если вы хотите распространять автономные исполняемые файлы.

До FPC 2.4 не было возможности использовать "нормальные" файлы ресурсов (*.res) в Lazarus, потому что они Win32 специфичны. Смотрите ниже #lazarus ресурсы.

Нормальные ресурсы доступны в последней версии FPC (включая все последние версии Lazarus). Смотрите ниже #fpc ресурсы.

Lazarus ресурсы

Для того чтобы использовать файлы как ресурсы Lazarus, нужно пересоздать их при помощи lazres. Lazres можно найти в папке "Tools", расположенной в установочной директории Lazarus (C:\Lazarus\Tools\).

Теперь можно скомпилировать файлы ресурсов Lazarus (*.lrs) при помощи командной строки. Синтаксис lazres:

pascal
<nowiki>lazres <?????? ?????????? ????????????????> <???????????????????? ?????????? (file1 file2 file3 ...)></nowiki>

Пример:

pascal
<nowiki>lazres mylazarusresource.lrs image.jpg</nowiki>

Для использования файла ресурсов Lazarus в вашем проекте, подключите его используя дирекстиву компилятора $I в разделе initialization вашего модуля.

Вы можете получить доступ к данным ресурса сразу или с использованием метода переменных LoadFromLazarusResource, которые после этого будут хранить данные. LoadFromLazarusResource принимает на вход один строковый параметр, который указывает, какой объект должен быть загружен из файла ресурсов. Пример:

pascal
procedure ExampleProc;
var
  Image: TImage
begin
  Image := TImage.Create;
  Image.Picture.LoadFromLazarusResource('image'); // Обратите внимание, что расширение файла не указывается
end;

initialization
  {$I mylazarusresource.lrs}

Этот код подключает файл mylazarusresource.lrs к проекту. В процедуре ExampleProc создан объект TImage и в него загружено изображение "image" из ресурса. Файл, который был встроен в ресурс, возможно был назван image.jpg.

Все класс, наследованные от TGraphic, имеют процедуру LoadFromLazarusResource.

Lazarus Resource Form File

Lazarus генерирует .LRS файлы c файлами формы .LFM.

Когда файл формы (*.lrs) отсутствует, FPC выдает следующее сообщение об ошибке: ERROR: unit1.pas(193,4) Fatal: Can't open include file "unit1.lrs"

Чтобы решить эту проблему вы можете:

Получение данных из LRS ресурса

Вы можете извлекать данные из ресурса так:

pascal
uses ...LResources...;

...
procedure TForm1.FormCreate(Sender: TObject);
var
  r: TLResource;
  Data: string;
begin
  r := LazarusResources.Find('datafile1');
  if r = nil then 
    raise Exception.Create('Resource datafile1 is missing');

  Data := r.Value;
  //...что-то делать с данными...
end;

FPC ресурсы

Начиная с версии FPC 2.4 вы можете использовать стандартные .rc (Resource Script) файлы для подключения ресурсов в ваших проектах. Для превращения .rc скрипта в бинарный ресурс (.res файл), FPC запускает внешний компилятор (windres или GoRC). Поэтому, компилятор ресурсов должен быть установлен и в переменной окружения PATH, должен быть прописан путь к нему. Для получения дополнительной информации см.: FPC Programmer's guide, chapter 13 "Using Windows resources"

Для упрощения процесса компиляции, можно использовать уже скомпилированные файлы ресурсов (.res). Вы можете предварительно скомпилировать ресурсы любым доступным компилятором - windres (доступен на Unix и Windows), GoRC (только Windows), Microsoft Resource Compiler (rc.exe входит в Visual Studio), Borland Resource Compiler (brcc32.exe входит в Delphi, C++ Builder или продукты Rad Studio) или любой другой.

Используйте директиву {$R filename.rc} или {$R filename.res} для включения файла ресурсов в исполняемый файл. FPC RTL предоставляет как низкоуровневые функции, так и высокоуровневые классы для работы с ресурсами.

Низкоуровневые функции:

Они совместимы с Windows API функциями [http://msdn.microsoft.com/en-us/library/ff468902(VS.85).aspx Resource Functions].

Базовым классом, работающим с ресурсами, является TResourceStream. LCL использует его для загрузки встроенных растровых изображений, иконок, и форм. Посмотрите на TGraphic.LoadFromResourceID или TIcon.LoadFromResourceHandle чтобы понять, как они используются в LCL.

Добавление ресурсов в программу

Давайте рассмотрим ситуацию, когда нужно сохранить некоторые данные в исполняемый файл и при выполнении программы необходимо извлечь их.

Сначала мы должны сообщить компилятору, какие файлы включить в ресурс. Делаем это в .rc файле:

Файл mydata.rc

pascal
<nowiki>MYDATA         RCDATA "mydata.dat"</nowiki>

Здесь MYDATA это имя ресурса, RCDATA это тип ресурса (подробнее смотрите [http://msdn.microsoft.com/en-us/library/ms648009(VS.85).aspx Resource Types]) и "mydata.dat" это файл с данными.

Давайте скажем компилятору подключить ресурс к программе:

pascal
program mydata;

{$R mydata.rc}
begin
end.

Незаметно, FPC указывает компилятору ресурсов, распространяемому вместе с ним, компилировать .rc скрипт в бинарный файл ресурсов .res. После, компоновщик включит его в исполняемый файл. Хотя это не заметно для программиста, но вы можете, если хотите, создать свой собственный .res файл при помощи, например, Borland Resource Compiler. Тогда, вместо использования

pascal
{$R mydata.rc}

нужно использовать

pascal
{$R mydata.res}

.

Установлен ли windres

На Linux/OS X, вам нужно убедиться, что компилятор ресурсов windres, который входит в состав инструментов mingw32, у вас установлен. Например на Debian вы можете выполнить:

bash
aptitude install mingw32-binutils
# this installs e.g. /usr/bin/i586-mingw32msvc-windres
# but FPC expects just windres, so:
ln -s /usr/bin/i586-mingw32msvc-windres /usr/bin/windres
# alternatively (and probably more "official") use -FCi586-mingw32msvc-windres in your calls to fpc or
# add -FCi586-mingw32msvc-windres to your fpc.cfg

На Windows, компиляторы ресурсов windres и gorc устанавливаются вместе с FPC и Lazarus.

Использование ресурсов в вашей программе

Давайте сейчас извлечем сохраненный ресурс в файл, например mydata.dat:

pascal
program mydata;
uses
  SysUtils, Windows;
{$R mydata.res}
var
  S: TResourceStream;
  F: TFileStream;
begin
  // create a resource stream which points to our resource
  S := TResourceStream.Create(HInstance, 'MYDATA', RT_RCDATA);
  // Please be aware of writing an apostrophes in resource type - source will not be axtracted!!!
  try
    // Создание файла mydata.dat в папке приложения
    F := TFileStream.Create(ExtractFilePath(ParamStr(0)) + 'mydata.dat', fmCreate); 
    try
      F.CopyFrom(S, S.Size); // Копирование данных из ресурса в файл
    finally
      F.Free; // destroy the file stream
    end;
  finally
    S.Free; // destroy the resource stream
  end;
end.

From the Free Pascal wiki, page "Lazarus Resources/ru", as it stood on 2020-02-18 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 1, last changed by WikiArchive .

Edited on wiki.freepascal.org by 5 people, 2013–2020

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
KangreonПеревод
KangreonИсправил внутренние ссылки (minor)
Chronos
FTurtle (minor)
FTurtle (minor)
Mr ramychLazarus Resource Form File (minor)
TrevFixed syntax highlighting; deleted category included in page template (minor)

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.