您的位置:首页 > 其它

FastReport几个使用技巧

2013-05-06 18:23 253 查看

FastReport几个使用技巧

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一样使用共用的报表组件了

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;


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;


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)>)]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: