Использование ресурсов для хранения отчетов FastReport

01.12.2021

Бывают ситуации, когда нужно ограничить пользователям программы возможности изменения и копирования отчётов. Главное это реализовать так, чтобы они даже и не догадывались, что в программе используется такой замечательный продукт как FastReport. Поговорим о том, как спрятать темплейты отчетов от посторонних глаз.

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

Для начала мы создадим файлы отчетов в FastReport VCL и сохраним их в директорию ReportList. Объявляем описание ресурсов через текстовый файл со следующим содержанием:

1
2
TEST RCDATA ".\ReportList\Test.fr3"
TEST2 RCDATA ".\ReportList\Test2.fr3"

Сохраняем файл с названием «TestFR.rc». После компилируем его командой BRCC32 TestFR.rc и получаем TestFR.res. В начало модуля нужно дописать строку:

1
{$R TestFR.res} 

Можно пойти более простым путём использовав библиотеку RxLib. После его установки в меню View появится пункт Project Resources. Выбираем Project Resources->New->User Data и добавляем нужные файлы отчетов.

Использования ресурсов для хранения отчетов FastReport

Напишем процедуру извлечения нужного нам ресурса.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private
 { Private declarations }
 procedure LoadRptFromResource(Report: TfrxComponent; const ResName: string);
...............
procedure TFormMain.LoadRptFromResource(Report: TfrxComponent;
 const ResName: string);
var
 m: TResourceStream;
begin
 m := TResourceStream.Create(HInstance, ResName, RT_RCDATA);
 try
 m.Position := 0;
 Report.LoadFromStream(m);
 finally
 m.Free;
 end;
end;

Теперь напишем обработчик печати нашего отчета.   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TFormMain.Button1Click(Sender: TObject);
var
Report: TfrxReport;
begin
 
 Report:= frxReportMain ;
 Report.Preview := nil ;
 
 Report.Script.Variables['dDAT'] := Edit1.Text;
 
 //Report.LoadFromFile( ExtractFilePath(Application.ExeName) + 'ReportList\Test.fr3 ');
 // Для отладки все таки, удобнее использовать LoadFromFile. После отладки и после 
 // создания файла описания ресурсов отчета, можно применить процедуру LoadRptFromResource 
 LoadRptFromResource(Report, 'Test'); // загрузка репорта из ресурсов
 Report.PrepareReport(True);
 
 //Report.LoadFromFile( ExtractFilePath(Application.ExeName) + 'ReportList\Test2.fr3 ');
 //
 LoadRptFromResource(Report, 'Test2'); // загрузка репорта из ресурсов
 Report.PrepareReport(False);
 
 Report.Preview:= PreviewForm.frxPreviewMain;
 PreviewForm.ShowModal;
end;

Конечно, у такого решения есть недостатки. Первый - это ресурсоемкость программы, ведь исполняемый файл увеличивается в разы, но зато хорошо сжимается упаковщиками. Второй - это заторможенность построения отчета.

Автор статьи: Леонтьев Олег Геннадьевич

VCL Lazarus FastReport Delphi VCL Lazarus FastReport Delphi
10 июля 2026

Как настроить Content Security Policy для отчетов FastReport .NET WEB

Узнайте, как настроить Content Security Policy для отчётов FastReport .NET WEB: обзор директив и значений CSP, изменения в архитектуре FastReport, типичные сценарии обхода и способы защиты.
22 июня 2026

Как настроить отчет с Business Objects из кода и дизайнера в FastReport .NET

В этой статье рассматривается реальный пример создания и использования шаблона отчета .frx для подключения к иерархическим бизнес-объектам в FastReport .NET.
21 апреля 2026

Использование водяных знаков в FastReport VCL

В статье подробно рассмотрели функционал добавления водяных знаков в FastReport VCL — как через визуальный интерфейс, так и программно, с помощью кода на Delphi и в скриптах отчётов.

Не является публичной офертой
© 1998-2026 ООО «Быстрые отчеты»