我使用FreeReport(来自FastReport),并且需要实现以下代码:
If TOTALPAGES > 1 then Pageheader.visible = false
我不知道,在哪里编写此代码,我试图在其中放入Pascal代码,但它不起作用。
并且此记录也不起作用:
[IFF([TOTALPAGES] > 1,'PAGEHEADER.VIBLE=0')]
什么是正确的方法?
最佳答案
通常放置代码的位置应为PageHeader带的OnBeforePrint
(*)事件,但这不适用于<TotalPages#>
procedure PageHeader1OnBeforePrint(Sender: TfrxComponent);
begin
TfrxPageHeader(Sender).visible := (<TotalPages#> = 1);
end;
这种方法的问题是
<TotalPages#>
目前不会被评估。这里的第二个问题是显示或隐藏PageHeader可能会影响页面数。为了获得期望的结果,您将必须通过
frxreport1.PrepareReport(true);
呈现报告。您可能会执行两次,使用可见的PageHeader和不可见的PageHeader。报告的每个部分都可以通过frxReport1.FindObject
访问。使用前请确保已分配。附带说明一下,影响对象在打印/预览上的另一个位置是frxReport组件的
OnPrint
事件,将在呈现每个对象之前为每个对象调用该事件。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;
通常的地方执行报告代码: