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

November 26, 2024

Installing FastReport on .NET 8.0 and Creating a Simple Report

The purpose of this article is to explain step by step how to install FastReport on .NET 8.0 and how to create a simple report. Taking the reporting process from the beginning, it will show how to connect, design and view reports.
November 20, 2024

Localization and Language Switching in FastReport VCL

FastReport VCL supports 40 languages for interface localization and allows you to change the language on the fly through menus or code, without recompilation.
November 01, 2024

New Features of the FastReport VCL Editor

We are considering new features of the report editor: extension lines, highlighting of intersecting objects, updated report and data trees.
Fast Reports
  • 800-985-8986 (English, US)
  • +4930568373928 (German)
  • +55 19 98147-8148 (Portuguese)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2024 Fast Reports Inc.