Использование ресурсов для хранения отчетов 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;

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

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

1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.
28 октября 2024

Как настроить WSL 2 для работы с FastReport и FastCube

В этой статье попробуем вместе разобраться, как настроить WSL 2 для работы с компонентами FastReport и FastCube в Lazarus для Linux.