FastReport中国社区FastReport联系电话 联系电话:023-68661681

FastReport报表示例:打印可变栏数和栏宽可变的报表

来源:   发布时间:2016-08-08   浏览:4003次

FastReport报表示例:打印可变栏数或未知栏数的报表中报表的所有栏宽是相等的。可是,在大多数情况下它是需要根据数据确定每栏的宽度。因此,例如,有两个栏,一个栏包含行号而另一个包含memo中的字段,显然第一个栏比另一个包含memo字段的栏的宽度要窄很多。

扩展的源代码放在PRNTBL2子目录中。这个例子除了栏宽是根据数据决定以外,其它的与上一例子相同。这个例子中有两个TfrReport的事件处理程序用于动态改变栏宽。

要根据数据动态定义栏宽,就必须使用TfrReport 对象的OnPrintColumn事件。在这个例子中栏中文本框的宽度由字段的“W”字母宽度的个数决定的;对于“日期和时间”字段,设置宽度为15个字母“W”的宽度;其它所有的栏宽设为64点。

这个OnPrintColumn事件处理的源代码显示如下:

procedure TForm1.frReport1PrintColumn(ColNo: Integer; var Width: Integer);

var

  Field: TField;

begin

  Field := Table1.Fields[ColNo – 1];

  if Field is TStringField then

    Width := Field.Size * Canvas.TextWidth('W')

  else if Field is TDateTimeField then

    Width := 15 * Canvas.TextWidth('W')

  else

    Width := 64;

  FWidth := Width;

end;

OnBeforePrint事件处理中将栏宽设为上面事件处理中定义的宽度:

procedure TForm1.frReport1EnterRect(Memo: TStringList; View: TfrView);

begin

  View.dx := FWidth;

end;

在这个例子中由于每个栏的宽度按数据确定,所以报表打印中非常有效地生成了页面。TfrPrintTable和TfrPrintGrid控件在打印TDBGrid和控件内容时就是这样工作的。

本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/1197.html

联系我们
  • 重庆总部 023-68661681
购买
  • sales@evget.com
合作
  • business@evget.com


扫码咨询
电话咨询
023-68661681
返回
顶部