user2922426
user2922426

Reputation: 21

FreeReport: how to format If-Then

I use FreeReport (from FastReport) and I need to implement such code:

If TOTALPAGES > 1 then Pageheader.visible = false

I do not know, where to write this code, I tried to put inside a pascal code, it not works.

And this record do not works also:

[IFF([TOTALPAGES] > 1,'PAGEHEADER.VIBLE=0')]

What is the right way to do this?

Upvotes: 2

Views: 902

Answers (2)

bummi
bummi

Reputation: 27377

The postition to usually place code would be a the OnBeforePrint (*) event of then PageHeader band, but this won't work with <TotalPages#>

procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);
begin     
    TfrxPageHeader(Sender).visible :=  (<TotalPages#> = 1);                                                                                                        
end;

The problem with this approach is <TotalPages#> won't be evaluated at this time.
A second problem here is the showing or hiding the PageHeader might affect the count of the pages. To achieve the desired result you will have to render the report by frxreport1.PrepareReport(true);. You might do this twice, with visible PageHeader and unvisble PageHeader. Every part of a report can be accesses by frxReport1.FindObject. Make sure this is assigned before using it.
As a sidenote, another place to effect the objects on printing/preview is the OnPrint event of the frxReport component, which will be called for every object before it's rendered.

begin
  frxReport1.FindObject('PageHeader1').Visible := true;
  frxReport1.PrepareReport(true);

  // in my test case 2 Pages
  Showmessage(IntToStr(frxReport1.PreviewPages.Count));

  frxReport1.ShowPreparedReport;

  frxReport1.FindObject('PageHeader1').Visible := false;
  frxReport1.PrepareReport(true);

  // in my test case 1 Page
  Showmessage(IntToStr(frxReport1.PreviewPages.Count));

  frxReport1.ShowPreparedReport;
end;

The usual place implement report code: enter image description here

Upvotes: 2

ahasoft
ahasoft

Reputation: 21

You can try similar code inside report: [if([PAGE#] < [TOTALPAGES], 'Ok', 'Not Ok')]

Upvotes: 1

Related Questions