FastReport4动态报表制作.docx
- 文档编号:23883692
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:11
- 大小:16.40KB
FastReport4动态报表制作.docx
《FastReport4动态报表制作.docx》由会员分享,可在线阅读,更多相关《FastReport4动态报表制作.docx(11页珍藏版)》请在冰豆网上搜索。
FastReport4动态报表制作
FastReport4 动态报表制作
注:
1、窗体报表控件 FR:
TfrxReport;frDB:
TfrxDBDataset
2、调用自定义函数:
GetPrnFieldWidth(ADOQ_List);//取得查询结果中各字段宽度
3、全局变量:
Prn_FieldWidth:
Array of integer;//打印时各字段宽度数组
通过GetPrnFieldWidth修改其值
4、uses PRINTERS;
代码:
procedureTFrm_yppf_prn_pfd.ToolButton3Click(Sender:
TObject);
Var
//DataPage:
TfrxDataPage;
Page:
TfrxReportPage;
PageTitle:
TfrxReportTitle;
PageHeader:
TfrxPageHeader;
//Band:
TfrxBand;
MastData:
TfrxMasterData;
PageSummary:
TfrxReportSummary;
Memo:
TfrxMemoView;
i:
integer;
MLeft:
Real;//表头字段在mastdata中的左边距
PaperWidth:
Real;//纯报表(不含边距)宽度(毫米)
begin
//清除报表
FR.Clear;
//1====添加页
Page:
=TfrxReportPage.Create(FR);
Page.CreateUniqueName;//创建唯一名称
//Page.SetDefaults;//设置默认字段大小, 纸张
//自定义纸张大小
//Page.PaperWidth:
=210;//纸张宽
//Page.PaperHeight:
=297;//纸张高
Page.PaperSize:
=9;//a4纸
Page.Orientation:
=poPortrait;//纸张纵向
//Page.Orientation:
=poLandscape;//纸张横向
Page.TopMargin:
=25;//上边距
Page.BottomMargin:
=15;
Page.LeftMargin:
=15;
Page.RightMargin:
=15;
//2====添加一个报表标题栏
PageTitle:
=TfrxReportTitle.Create(Page);
PageTitle.CreateUniqueName;
PageTitle.Top:
=0;
PageTitle.Height:
=140; //留出空白行
//得到报表不含边距的宽度(毫米)转换为像素时需乘以3.77953
//SetBounds中用的是像素值
PaperWidth:
=(Page.PaperWidth-page.LeftMargin-page.RightMargin)*3.77953;
//添加标题memo
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haCenter;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Font.Size:
=14;
Memo.Text:
='药品批发单';
Memo.Height:
=40;
Memo.Align:
=baWidth;//伸展坐标到标题栏的宽度
//摘要第一行
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='单号:
'+LEdit_dh.Hint;
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(0,60,PaperWidth/3,20);
//
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='单位:
'+LEdit_dwmc.Text;
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(PaperWidth/3,60,PaperWidth/3,20);
//
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='批发金额:
'+LEdit_SumPfj.Text;
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(PaperWidth/3*2,60,PaperWidth/3,20);
//摘要第二行
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='结算方式:
'+LEdit_jsfsmc.Text;
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(0,80,PaperWidth/3,20);
//
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='制单人:
'+LEdit_zdr.Text;
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(PaperWidth/3,80,PaperWidth/3,20);
//
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='制单日期:
'+LEdit_zdrq.Text;
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(PaperWidth/3*2,80,PaperWidth/3,20);
//摘要第三行
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='操作员:
'+UserName;
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(0,100,PaperWidth/3,20);
//
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='打印日期:
'+DateToStr(Date)+'^^^'+TimeToStr(GetTime);
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(PaperWidth/3,100,PaperWidth/3,20);
//
Memo:
=TfrxMemoView.Create(PageTitle);
Memo.CreateUniqueName;
Memo.HAlign:
=haLeft;//左右居中
Memo.VAlign:
=vaCenter;//上下居中
Memo.Text:
='';
Memo.Height:
=20;
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.SetBounds(PaperWidth/3*2,100,PaperWidth/3,20);
//=3==添加Pageheader (表头)
PageHeader:
=TfrxPageHeader.Create(Page);
PageHeader.CreateUniqueName;
//PageHeader.Top:
=PageTitle.Height+120;//其总是紧随PageTitle之后
PageHeader.Height:
=20;
//添加表头memo
GetPrnFieldWidth(ADOQ_List);//取得查询结果中各字段宽度
MLeft:
=0;
fori:
=0toADOQ_List.FieldCount-1do
Begin
Memo:
=TfrxMemoView.Create(PageHeader);
Memo.CreateUniqueName;
Memo.HAlign:
=haCenter;
Memo.HAlign:
=haCenter;
Memo.VAlign:
=vaCenter; //上下对齐
Memo.Frame.TopLine.Style:
=fsSolid;
Memo.Frame.BottomLine.Style:
=fsSolid;
Memo.Frame.LeftLine.Style:
=fsSolid;
Memo.Frame.RightLine.Style:
=fsSolid;//边线格式
Memo.Frame.Typ:
=[ftLeft,ftRight,ftTop,ftBottom];//显示边线
Memo.Text:
=Trim(ADOQ_List.Fields[i].FieldName);
ifi Begin Memo.SetBounds(MLeft,0,Prn_FieldWidth[i]*7.5,20); End Else Begin//最后一列时 ,页面剩余宽度都给他 Memo.SetBounds(MLeft,0,PaperWidth-MLeft,20); End; MLeft: =MLeft+Prn_FieldWidth[i]*7.5;//下一列左起位置 End; //4=====主数据 (记录) MastData: =TfrxMasterData.Create(Page); MastData.CreateUniqueName; MastData.Top: =PageTitle.Height+PageHeader.Height; MastData.Height: =20; MastData.DataSet: =frDB; //添加 memo MLeft: =0; fori: =0toADOQ_List.FieldCount-1do Begin Memo: =TfrxMemoView.Create(MastData); Memo.CreateUniqueName; //Memo.HAlign: =haCenter; Memo.HAlign: =haLeft; Memo.VAlign: =vaCenter; //上下对齐 Memo.Font.Size: =9; Memo.Frame.TopLine.Style: =fsSolid; Memo.Frame.BottomLine.Style: =fsSolid; Memo.Frame.LeftLine.Style: =fsSolid; Memo.Frame.RightLine.Style: =fsSolid;//边线格式 Memo.Frame.Typ: =[ftLeft,ftRight,ftTop,ftBottom];//显示边线 Memo.DataSet: =frDB; Memo.DataField: =Trim(ADOQ_List.Fields[i].FieldName); ifi Begin Memo.SetBounds(MLeft,0,Prn_FieldWidth[i]*7.5,20); End Else Begin//最后一列时 ,页面剩余宽度都给他 Memo.SetBounds(MLeft,0,PaperWidth-MLeft,20); End; MLeft: =MLeft+Prn_FieldWidth[i]*7.5;//下一列左起位置 End; //5=====页尾 PageSummary: =TfrxReportSummary.Create(page); PageSummary.CreateUniqueName; PageSummary.Height: =20; //添加summarymemo Memo: =TfrxMemoView.Create(PageSummary); Memo.CreateUniqueName; Memo.HAlign: =haLeft;//左右居中 Memo.VAlign: =vaCenter;//上下居中 Memo.Top: =0; Memo.Left: =0; Memo.Height: =20; Memo.Font.Size: =10; Memo.Text: =MyCompany.Name; Memo.Align: =baWidth;//伸展坐标到标题栏的宽度 // FR.DesignReport(); exit; //显示报表 FR.ShowReport; end; 自定义函数代码: //=============================================================== //====得到欲打印的查询结果中各字段的最长值,结果保存在Prn_FieldWidth====== //================================================================ ProcedureGetPrnFieldWidth(MyADOQ: TADOQuery); Var i: integer; FindSql: String; Begin SetLength(Prn_FieldWidth,MyADOQ.FieldCount); //先使表头字段宽度等于标题宽度 fori: =0toMyADOQ.FieldCount-1do Begin //ADOQ_List.Fields[i].FieldName 默认为宽字符型 widestring,用length只能取得其字符长度 //用Pchar可将其转换为AnsiString类型,这样length可以取得其字节长度 Prn_FieldWidth[i]: =Length(Pchar(Trim(MyADOQ.Fields[i].FieldName))); MyADOQ.Next; End; //再用查询结果各字段结果长于标题着替换 fori: =0toMyADOQ.FieldCount-1do Begin FindSql: ='SELECTMax(Datalength('+Trim(MyADOQ.Fields[i].FieldName)+'))as 字段最长值' +'FROM('+MyADOQ.SQL[0]+')DERIVEDTBL'; DM.ADOQ_Find.Close; DM.ADOQ_Find.SQL.Clear; DM.ADOQ_Find.SQL.Add(FindSql); DM.ADOQ_Find.Open; ifDM.ADOQ_Find.RecordCount>0then Begin ifStrToInt(DM.ADOQ_Find.FieldByName('字段最长值').AsString)>Prn_FieldWidth[i]then Prn_FieldWidth[i]: =StrToInt(DM.ADOQ_Find.FieldByName('字段最长值').AsString); End; MyADOQ.Next; End; End;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FastReport4 动态 报表 制作