Using resources for storing FastReport reports

2021-12-01

Sometimes you may need to restrict the users' ability to edit and copy reports. The key is to do it so that they would not even guess that the program uses such a wonderful product as FastReport. Let's talk about how to keep report templates hidden from prying eyes.

The idea is pretty simple: to store report templates inside an executable file, and to extract and execute them when you need it.

First, we will create report files in FastReport VCL and save them to the ReportList directory. Describe the resources through a text file with the following content:

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

Let’s save the file with the name "TestFR.rc". Then we compile it with the BRCC32 TestFR.rc command and get TestFR.res. You need to add the following string to the beginning of the module:

1
{$R TestFR.res} 

You can make it easier using the RxLib library. After installing it, the Project Resources item will appear in the View menu. Select Project Resources-> New-> User Data and add the required report files.

Using resources for storing FastReport reports

Let's write a procedure for extracting the resource we need.

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;

Now let's write a print handler for our report.

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 ');
 //For checkout, it is still more convenient to use LoadFromFile. After checkout and after 
 //created the file for report resource description, you can apply the procedure LoadRptFromResource 
 LoadRptFromResource(Report, 'Test'); //loading report from resources
 Report.PrepareReport(True);
 
 //Report.LoadFromFile( ExtractFilePath(Application.ExeName) + 'ReportList\Test2.fr3 ');
 //
 LoadRptFromResource(Report, 'Test2'); // loading report from resources
 Report.PrepareReport(False);
 
 Report.Preview:= PreviewForm.frxPreviewMain;
 PreviewForm.ShowModal;
end;

Of course, this solution has flaws. The first one is the resource intensity of the program because the executable file increases several times, but packers compress it well. The second is the slow report generation.

The author of the article: Oleg Leontiev Gennadievich

VCL VCL Lazarus Lazarus FastReport FastReport Delphi Delphi
February 17, 2026

How to Install FastReport Desktop on Windows and Linux

In this article, we will outline the detailed steps for installing, configuring, and launching the FastReport Desktop installer, with examples for each platform.
February 06, 2026

FastReport VCL: How 25 Years of Innovation Changed the Approach to Reporting in VCL Applications

We decided to take a look back to demonstrate how reporting technologies have changed and to trace the key stages of FastReport VCL development in each version.
October 13, 2025

New Features for Exporting Images to Microsoft Word in FastReport .NET

In the latest version of FastReport .NET we have added new image export features. Now you can independently adjust the balance between the quality and size of the final document.

© 1998-2026 Fast Reports Inc.