Access to a fields of a reports
Following an earlier advice from DM people here on the list to exclude
all elements of a report from the executable and instead load the report
at runtime from file, I am now facing this problem:
On a report I have a checkbox that cannot be set by a field from the
query. Instead, when the user clicks the button to print the report,
he/she is being asked to make a selection to check/uncheck the box.
This is not a problem as long as I have the reports checkbox defined in
the unit of my delphi program, I can use something like
MyCheckBox.Checked := True;
So my question is: Is it possible to access the fields of a report after
it is being loaded from file?
Florian
all elements of a report from the executable and instead load the report
at runtime from file, I am now facing this problem:
On a report I have a checkbox that cannot be set by a field from the
query. Instead, when the user clicks the button to print the report,
he/she is being asked to make a selection to check/uncheck the box.
This is not a problem as long as I have the reports checkbox defined in
the unit of my delphi program, I can use something like
MyCheckBox.Checked := True;
So my question is: Is it possible to access the fields of a report after
it is being loaded from file?
Florian
This discussion has been closed.
Comments
Yes, I would suggest creating a report object loop inside the template
OnLoadEnd event to reveal the checkbox and assign its properties as you
need. See the following articles below for more information on performing
both tasks.
----------------------------------------------
Tech Tip: Using Template Events
----------------------------------------------
The Report.Template object has several events that can be used for
customizing what happens when a report is loaded or saved:
- OnLoadStart
- OnLoadEnd
- OnNew
- OnSaveStart
- OnSaveEnd
The OnLoadEnd and OnNew events are often used to perform actions related
to report and data initialization.
The OnSaveEnd event is often used to save additional descriptive
("meta") data to the database each time the report is saved.
Example:
The Report.Template events are public and therefore must be assigned at
run-time.
1. In the private section of your form declaration you can declare an
event-handler method:
TForm = class(TForm)
private
procedure myTemplateOnLoadEndEvent(Sender: TObject);
public
end;
2. In the Form.OnCreate event, you can assign the event-handler to the
event:
procedure TForm1.FormCreate(Sender: TObject);
begin
ppReport1.Template.OnLoadEnd := myTemplateOnLoadEndEvent;
end;
3. Implement the event-handler method:
procedure TForm1.myTemplateOnLoadEndEvent(Sender: TObject);
begin
{add code here to initial the report or data, etc. }
ppReport1.PrinterSetup.MarginTop := 0.5;
end;
----------------------------------------------
Tech Tip: Loop Thru All Objects in a Report
---------------------------------------------
A ReportBuilder report is composed of a set
of components. The basic structure is
Reports.Bands[].Objects[]
The bands and objects within the report can
be accessed directly by object name or
via the Bands and Objects array properties.
Below is an example of using the Bands and
Objects array properties to change the font for
all objects on a report.
uses
ppClass;
procedure AssignFontToReport(aFont: TFont; aReport: TppCustomReport);
var
liBand: Integer;
liObject: Integer;
lObject: TppComponent;
begin
for liBand := 0 to aReport.BandCount-1 do
for liObject := 0 to aReport.Bands[liBand].ObjectCount-1 do
begin
lObject := aReport.Bands[liBand].Objects[liObject];
if lObject.HasFont then
lObject.Font := aFont;
end;
end;
--
Regards,
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com