2

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?

4

2 回答 2

2

通常放置代码的位置是PageHeader带的OnBeforePrint(*) 事件,但这不适用于<TotalPages#>

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

<TotalPages#>目前不会评估这种方法的问题。
这里的第二个问题是显示或隐藏 PageHeader 可能会影响页数。要获得所需的结果,您将必须通过 呈现报告frxreport1.PrepareReport(true);。您可能会这样做两次,使用可见的 PageHeader 和不可见的 PageHeader。报告的每个部分都可以通过frxReport1.FindObject. 确保在使用之前分配它。
作为旁注,另一个影响打印/预览对象的地方是OnPrintfrxReport 组件的事件,它将在每个对象被渲染之前调用它。

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;

通常的地方实现报告代码: 在此处输入图像描述

于 2013-10-26T15:27:19.173 回答
1

您可以在报告中尝试类似的代码:[if([PAGE#] < [TOTALPAGES], 'Ok', 'Not Ok')]

于 2013-10-26T07:40:45.517 回答