Get清风FastReport4动态报表制作.docx

上传人:b****2 文档编号:24213149 上传时间:2023-05-25 格式:DOCX 页数:11 大小:16.37KB
下载 相关 举报
Get清风FastReport4动态报表制作.docx_第1页
第1页 / 共11页
Get清风FastReport4动态报表制作.docx_第2页
第2页 / 共11页
Get清风FastReport4动态报表制作.docx_第3页
第3页 / 共11页
Get清风FastReport4动态报表制作.docx_第4页
第4页 / 共11页
Get清风FastReport4动态报表制作.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

Get清风FastReport4动态报表制作.docx

《Get清风FastReport4动态报表制作.docx》由会员分享,可在线阅读,更多相关《Get清风FastReport4动态报表制作.docx(11页珍藏版)》请在冰豆网上搜索。

Get清风FastReport4动态报表制作.docx

Get清风FastReport4动态报表制作

FastReport4-动态报表制作

FastReport4 动态报表制作

 

注:

1、窗体报表控件 FR:

TfrxReport;frDB:

TfrxDBDataset

2、调用自定义函数:

GetPrnFieldWidth(ADOQ_List);//取得查询结果中各字段宽度

3、全局变量:

Prn_FieldWidth:

Array  of  integer;//打印时各字段宽度数组

通过GetPrnFieldWidth修改其值

4、uses PRINTERS; 

代码:

on3Click(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;  //留出空白行

//得到报表不含边距的宽度(毫米)转换为像素时需乘以

//SetBounds中用的是像素值

PaperWidth:

=(Page.PaperWidth-page.LeftMargin-page.RightMargin)*3.77953;

//添加标题memo

Memo:

=TfrxMemoView.Create(PageTitle);

iqueName;

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);

UniqueName;

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);

ight:

=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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1