1.FastReport中如何共用TFrxreport及TfrxDBDataSet
一个程序中,不管多么大的程序,只要打印或预览时是模式的,则完全可以共用一个TFrxreport
变量及几个TfrxDBDataSet。只不过,要注意完成一个报表程序的步骤,主要是下面几步
1)清除报表,得到一个全新的报表内容。
Frxreport1.clear。
2)设置要使用的TfrxDBDataSet的别名,如果不需要可以省略这一步,但一般最好不同的报表用不
同的别名。
注意这一步要在加载报表文件之前,因为一般设计报表文件时已经包含了别名信息。
frxDBDataSet1.UserName:=别名;
3)加载报表或动态建立一个TfrxReportPage。
Frxreport1.LoadFromFile(报表文件的完整文件名);
4)关联TfrxDBDataSet与TDataset,并设置要使用哪些TfrxDBDataSet。
Frxreport1.DataSets.Clear;//先清除原来的数据集
frxDBDataSet1.DataSet:=dataset1;//关联Fastreport的组件与TDataset数据集。
Frxreport1.DataSets.Add(frxDBDataSet1);//加载关联好的TfrxDBDataSet到报表中。
经过这几步后,就可以像单独使用一个Tfrxreport一样使用共用的报表组件了
写成函数是
procedure IniReport(var frReport:TfrxReport;var frDbBase:TfrxDBDataset;ReportName: string; qry: TADOQuery);
begin
frReport.clear;
frReport.LoadFromFile(ReportName);
frReport.DataSets.Clear;
frDbBase.DataSet := qry;
frReport.DataSets.Add(frDbBase);
end;
2.如何打印空白处?
在打印报表的Band处的OnBeforePrint事件中添加代码:
while FreeSpace > 20 do
ShowBand(Child1)
3.如何打印指定行数后换页?
在master band中OnBeforePrint事件中写代码:
var
vLineCount: integer;
begin
vLineCount := vLineCount + 1;
if vLineCount = 10 then
begin
vLineCount := 0;
NewPage;
end;
end;
4.fastreport中如何把数据显示为百分比
DisplayFormat属性,其中的Kind你设置成fkNumeric,FormatStr
[<frxDBDataset1."sjl">*100 #n%2.2f]%”
5.FastReport如何打印表格式的空行?
var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := <Line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 1) then
Engine.newpage;
child1.visible := False;
end;
//Footer1高度設為0
procedure Footer1OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i := iif(PageLine=0, PageMaxRow, PageLine);
child1.visible := True;
while i < PageMaxRow do
begin
i := i + 1;
Engine.ShowBand(Child1); //印空白表格
end;
child1.visible := False;
end;
begin
end.
6.在首页打印本页小计,最后一页打印本页小计和合计(如果只有一页,则打印本页小计和合计)
frxReport1.PrepareReport();
frxReport1.Variables['pageQ'] := pageQ;
frxReport1.Variables['hander'] := QuotedStr(hander);
frxReport1.Variables['doubleline'] := QuotedStr(StringOfChar('=', Length(hander) + 12));
whName :='设备资产';
frxReport1.Variables['p1'] := QuotedStr('仓库:' + whName);
frxReport1.Variables['p9'] := QuotedStr('领用科室:' + DepName);
frxReport1.Variables['p2'] := QuotedStr('日期:' + ywDate);
frxReport1.Variables['p3'] := QuotedStr('单据号:' + VoucherNo);
if warehouseno=3 then
begin
frxReport1.Variables['p8'] := QuotedStr('经手:');
frxReport1.Variables['p4'] := QuotedStr('保管:');
frxReport1.Variables['p5'] := QuotedStr('负责人:');
end
else
begin
frxReport1.Variables['p8'] := QuotedStr('采购:');
frxReport1.Variables['p4'] := QuotedStr('验收:');
frxReport1.Variables['p5'] := QuotedStr('科室签字:');
end;
frxReport1.Variables['p6'] := QuotedStr('操作员:'+Operator);
frxReport1.Variables['p7'] := QuotedStr('打印日期:' + prDate);
frxReport1.Variables['p10'] := QuotedStr('('+ShareGlobalVar.GlobalVar.GetUnitID+')');
if IsPreView then
begin
frxReport1.ShowReport;
end
else
begin
frxReport1.PrintOptions.ShowDialog := False;
frxReport1.PrepareReport();
frxReport1.Print;
end;
end;
在FastReport写入代码
procedure ColumnFooter1OnBeforePrint(Sender: TfrxComponent);
var
bVisible: boolean;
begin
bVisible := <Page> = <pageQ>;
Memo12.visible := bVisible;
Memo21.visible := bVisible;
Memo16.visible := bVisible;
Memo14.visible := bVisible;
if not bvisible then
begin
p8.Top := 27;
p7.Top := 27;
p4.Top := 27;
p5.Top := 27;
p6.Top := 27;
end
else
begin
p8.Top := 49.46;
p7.Top := 49.46;
p4.Top := 49.46;
p5.Top := 49.46;
p6.Top := 49.46;
end;
end;
procedure Page1OnBeforePrint(Sender: TfrxComponent);
var
bVisible: boolean;
begin
bVisible := <Page> = <pageQ>;
if not bvisible then
begin
ColumnFooter1.Height:=48;
end
else
begin
ColumnFooter1.Height:=69.35;
end;
end;
begin
end.
7.加入自定义函数
(1)在delphi程序中定义函数
frxReport1.AddFunction('function MoneyCn(mmje: Double): String;','Myfunction','小写金额转大写的函数');
frxReport1.OnUserFunction :=frxUserFunction;
(2)在frxUserFunction事件中加载函数
function TFunComm.frxUserFunction(const MethodName: string;
var Params: Variant): Variant;
begin
if UpperCase(MethodName) = UpperCase('MoneyCn') then
Result := MoneyCn(Params[0]);
end;
(3)实现函数(数字转大写)
function MoneyCn(mmje: Double): string;
const
s1: string = '零壹贰叁肆伍陆柒捌玖';
s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';
function StrTran(const S, s1, s2: string): string;
begin
Result := StringReplace(S, s1, s2, [rfReplaceAll]);
end;
var
S, dx: string;
i, Len: Integer;
begin
if mmje < 0 then
begin
dx := '负';
mmje := -mmje;
end;
S := Format('%.0f', [mmje * 100]);
Len := Length(S);
for i := 1 to Len do
dx := dx + Copy(s1, (Ord(S[i]) - Ord('0')) * 2 + 1, 2) + Copy(s2, (Len - i)
* 2 + 1, 2);
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰',
'零'),
'零拾', '零'), '零角', '零'), '零分', '整');
dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零',
'零'),
'零亿', '亿'), '零万', '万'), '零元', '元');
if dx = '整' then
Result := '零元整'
else
Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
end;
(4) FastReport中引用函数
如:[MoneyCn(<SUM(<frxDBDataset1."M3">,MasterData1,2)>)]
8.在FastReport中将两字段连接起来(用脚本实现)
[Trim(<frxDBDataset1."C2">)+' '+Trim(<frxDBDataset1."C3">)]
9.数据栏的动态调试设置
MasterData根据数据自动设置其高度
(1)首先设置MasterData栏的Stretch为True
(2) 再右键单击MasterData栏的各个字段,选中Stretch to Max Height
即可
10.在Delphi中定义数据字段
var
frxMemo: TfrxMemoView;
if frxMemo <> nil then
begin
frxMemo.AllowExpressions := True;
frxMemo.Memo.Text := '[SUM(<frxDBDataset1."FDHJ' + IntToStr(i) + 'SL">,MasterData1)]';
end;
11.分组时打印页号,如1/1,2/1,1/2,2/2,3/2,4/2
在FastReport的脚本中写入:
var
GPage,GIndex,FGIndex:integer;
PageList:array of integer;
procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
begin
GPage := GPage + 1;
FGIndex :=0;
end;
procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
GPage :=1;
end;
procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then //二次遍历时增加分组索引
FGIndex := FGIndex + 1
else
begin
setLength(PageList,GIndex + 1);
PageList[GIndex] := GPage; //存放分组的总页数
GIndex := GIndex + 1;
end;
GPage := 0;
end;
procedure Memo6OnBeforePrint(Sender: TfrxComponent);
begin
if not Engine.FinalPass then exit;
Memo6.Lines[0] := '总页号:'+IntToStr(PageList[FGIndex]);//Memo6为总页数
end;
begin
end.
分页号的memo中写入
分页号:[GPage]
12.如果分组头要每页都显示,则在GroupHeader1的右键中选择Start New Page,Keep Together,Reprint on New Page,Reset Page Numbers
分享到:
相关推荐
FastReport常见的几个问题 1.FastReport中如何共用TFrxreport及TfrxDBDataSet 2.如何打印空白处? 3.如何打印指定行数后换页? 4.fastreport中如何把数据显示为百分比 5.FastReport如何打印表格式的空行? 6.在...
在此之前,尽管FastReport已经支持二维码生成,但对于中文字符的支持可能存在一些问题,可能显示不全或者编码不准确。经过改进,现在FastReport能够很好地处理中文字符,确保生成的二维码不仅包含中文信息,而且...
除了中文乱码问题的修复,FastReport 4.10.5还强调了对Delphi版本的广泛支持,涵盖从D4到D15的多个版本。Delphi是流行的面向对象的Pascal编程环境,它的各个版本有着不同的特性和功能。FastReport 4.10.5的兼容性...
压缩包子文件的文件名列表中,我们看到有以下几个关键文件: 1. Project1.cfg、Unit1.dcu、Unit1.ddp、Unit1.dfm、Project1.dof、Project1.dpr:这些都是Delphi开发环境中常见的文件。这可能意味着这个转换项目是用...
FastReport中的函数主要分为几个类别:数据操作、格式转换、数学运算、字符串处理、日期时间处理等。这些函数可以帮助开发者在报表设计中进行数据的筛选、计算、格式化等操作。 2. **数据操作函数** - `FRxDBData...
这个指南让你熟悉报表设计器和了解报表设计的基本概念(各种区域,数据源,二次表,等等)。...FastReport是一个已经拥有三年历史的非常成熟的报表设计器,成长使它拥有其它Delphi报表设计器所不能相比的诸多先进特性。
在使用.NET FastReport汉语包时,开发者需要注意以下几点: 1. 安装与配置:确保在安装FastReport时选择了“中文(简体)”作为语言选项,或者在安装完成后手动配置语言设置,指向Chinese (Simplified).frl文件。 ...
在使用FastReport时,开发者需要注意以下几点: 1. **学习曲线**:尽管FastReport相对易用,但初次接触时可能需要花费一些时间来熟悉其设计理念和操作方式。 2. **性能优化**:在处理大量数据或复杂报表时,可能...
在C#中调用FastReport通常涉及以下几个步骤: 1. **添加引用**:首先,你需要将FastReport库添加到你的C#项目中。在本例中,我们看到有"BaseReport.dll"这个文件,这可能是FastReport的基础库。在Visual Studio中,...
在实际开发中,升级FastReport.Net时,还需要关注以下几点: 1. **代码兼容性**:确保您的代码能与新版本的API兼容,如果有不兼容的地方,可能需要修改代码。 2. **报表模板兼容性**:新版本可能引入了对旧模板的不...
在FastReport中,制作饼图的步骤通常包括以下几个关键点: 1. **设计界面**:打开FastReport的设计器,你可以看到一个类似Word的界面,可以在其中添加各种组件,包括表格、文本框和图表。选择“图表”组件,将其...
解决FastReport中文乱码问题可能涉及以下几个方面: 1. 字体设置:确保报表设计中使用了支持中文的字体,如宋体、微软雅黑等。 2. 编码设置:检查FastReport组件和应用程序的编码设置,确保使用的是UTF-8或其他支持...
应用补丁的过程通常包括以下几个步骤: 1. 备份原有文件:在替换或修改任何文件之前,首先备份原有的FastReport库文件,以便于回滚更改。 2. 解压补丁:将"fastreport菜单中文乱码补丁.zip"解压缩到一个临时目录。...
FastReport提供了一个可视化的报表设计器,使得开发者能够轻松地添加各种控件(如文本框、图像、图表等),并能够通过内置的脚本语言来控制这些控件的行为和外观。FastReport支持多种数据源,包括数据库表、查询结果...
报表的创建过程可以分为几个步骤,包括设计报表模板、添加数据源、添加报表控件、设置报表样式等。 四、数据 数据是报表的核心组成部分。FastReport支持多种数据源,包括数据库、Excel表格、文本文件等。开发者...
FastReport的主要功能包括但不限于以下几点: 1. 报表设计:FastReport提供了一个可视化的报表设计器,允许开发者通过拖放操作来创建复杂的报表布局,包括表格、图表、文本、图片等各种元素。在4.7.9版本中,设计...
要将FastReport的二进制流转换成图片,我们需要以下几个步骤: 1. **生成报表**:在FastReport中,首先设计好报表模板,设置好数据源、样式和布局。然后运行报表引擎,根据数据填充报表内容,并将其渲染成图像格式...
FastReport主要由以下几个部分组成: 1. **Report Designer**:这是用于设计报表的界面,你可以添加各种字段、文本、图像、表格等元素,并进行样式设置。 2. **FRXReport**:这是FastReport的主要组件,负责处理...
在FastReport的程序员手册中,我们将会深入探讨以下几个核心知识点: 1. **安装与配置**:首先,了解如何在项目中安装FastReport库,这通常通过NuGet包管理器完成。然后,配置FastReport环境,包括设置数据源、导入...
首先,FastReport的简单实现涉及到几个关键步骤。安装FastReport库后,你可以通过设计界面创建报表模板,包括各种数据字段、文本、图像等元素。在C#代码中,你可以加载这个模板,并绑定到数据源,如数据库或自定义...