hize

导航

FASTREPORT(3)

 

Access report objects from a code 存取报表物件程序代码

FastReport 的物件,例如报表页面(page)、数据带(band)、备注(memo)物件,并非直接可由你的程序代码来存取的,这个意思是你不能直接使用物件的名称来存取,例如,从你的表格(Form)上面存取按钮(Button),要存取某个物件,必须透过«TfrxReport.FindObject» ; 方法的协助而取得:

var

Memo1 : TfrxMemoView;

Memo1 := frxReport1.FindObject('Memo1') as TfrxMemoView;

执行上述程序代码之后,我们可以取得物件的属性或执行物件的方法,另外,你也可以使用属性«TfrxReport.Pages» 取得报表页面的值:

Var

Page1: TfrxReportPage;

begin Page1 := frxReport1.Pages[0] as TfrxReportPage;

:

end;

Creating a report form from a code 使用程序代码建立报表

你必须使用报表设计器建立大部分的报表,这是一个定律,不过,在某些案例(例如,当报表的格式尚未建立),我们必须透过程序代码的协助手动建立报表。手动建立报表,应依序执行下列的步骤:-清除报表元件的內容-加入报表的数据来源 -加入报表的版面(页面) -加入页面的报表区域-设定区域的属性,且将它连接至数据  -加入物件至每一个区域  -设定物件的属性,且将它连接至数据.让我们来看建立简单的清单【list】 报表,假设我们有下列的元件:

TfrxReport frxDBDataSet1: TfrxDBDataSet ( 最后一个元件透过DBDEMOS 连接【Customer.db】 数据表)。我们的报表包含一页,里面有«ReportTitle» «Master Data» 区域,在 «Report Title»Page: 21

区域上面有一个物件显示 "Hello FastReport!" ,且 «Master Data» 包含一个物件,上面有一个物件连接至 "CustNo" 字段。

Var

Page: TfrxReportPage;

Band: TfrxBand;

DataBand: TfrxMasterData;

Memo: TfrxMemoView;

{ 清除报表元件的內容 }

frxReport1.Clear;

{ 加入数据集至报表}

frxReport1.DataSets.Add(frxDBDataSet1);

{ 加入页面 }

Page := TfrxReportPage.Create(frxReport1);

{ 建立唯一的页面名称 }

Page.CreateUniqueName;

{ 设定预置的字段、纸张大小 }

Page.SetDefaults;

{ 修改纸张的方向}

Page.Orientation := poLandscape;

{ 加入报表标题区域}

Band := TfrxReportTitle.Create(Page);

Band.CreateUniqueName;

{ it is sufficient to set the «Top» coordinate and height for

a band }

{ 坐标的单位采用象素(pixels) }

Band.Top := 0;

Band.Height := 20;

{加入物件至报表标题区域}

Memo := TfrxMemoView.Create(Band);

Memo.CreateUniqueName;

Memo.Text := 'Hello FastReport!';

Memo.Height := 20;

{ 物件自动调整大小与区域同宽 }

Memo.Align := baWidth;

{ 加入主数据区域 }

DataBand := TfrxMasterData.Create(Page);

DataBand.CreateUniqueName;

DataBand.DataSet := frxDBDataSet1;

{ Top 坐标必须大于前一个加入区域的top + height}

DataBand.Top := 100;

DataBand.Height := 20;

{ 加入物件至主数据区域}

Memo := TfrxMemoView.Create(DataBand);

Memo.CreateUniqueName;

{ 连接至数据 }

Memo.DataSet := frxDBDataSet1;

Memo.DataField := 'CustNo';

Memo.SetBounds(0, 0, 100, 20);

{ 调整文字至物件的右边界 }

Memo.HAlign := haRight;

{ 显示报表 }

frxReport1.ShowReport;

让我们解释某些细节。所有被报表所使用的数据来源,都必须被加入数据来源清单。在我们的案例中,这个动作由程序代码«frxReport1.DataSets.Add(frxDBDataSet1)» 生成,否则,报表无法工作。并不需要调用 Page.SetDefaults,因为在此案例报表页面的格式为A4,边界为0mmSetDefaults 将導致页面边界设为 10mm,至其他的设定则由印表機的预置值所取代。当加入区域至报表页面,你应该确认它并未与其他的区域重叠,要执行此工作,你可以设定«Top» «Height» 坐标,而不需要修改«Left» «Width» 坐标,因为区域与所在的页面的宽度一定相同。有一点必须特别说明的,页面上区域位置出现的次序是非常的重要,因为输出的順序是以报表设计时的次序为准。物件的坐标和大小是以象素(Pixels)计算,因为所有物件的«Left,»«Top,» «Width,» «Height» 属性均拥有 «Extended» 类型,你可以指出非整数的值,下列的常数被定义用来转换象素(Pixel)至厘米(cm)或英吋(inch)

fr01cm = 3.77953;

fr1cm = 37.7953; fr01in = 9.6; fr1in = 96;

例如,数据带(Band)的高度等于5mm 可以设定如下:

Band.Height := fr01cm * 5; Band.Height := fr1cm * 0.5;

Creating a dialogue form from a code 建立对话窗口程序代码

如同我们所知的,报表可以包含对话窗口。下列的范例示范如何建立含有«OK»按钮的对话窗口。

{ 为了在报表內使用对话窗口,Delphi 程序必须引用frxCtrl 单元 }

uses frxDCtrl;

P

var

age: TfrxDialogPage;

Button: TfrxButtonControl;

{ 新增页面 }

Page := TfrxDialogPage.Create(frxReport1);

{ 建立唯一的页面名称 }

Page.CreateUniqueName;

{ 设定大小 }

Page.Width := 200;

Page.Height := 200;

{ 设定窗口显示位置 }

Page.Position := poScreenCenter;

{ 加入按钮(button) }

Button := TfrxButtonControl.Create(Page);

Button.CreateUniqueName;

Button.Caption := 'OK';

Button.ModalResult := mrOk;

Button.SetBounds(60, 140, 75, 25);

{ 显示报表 }

frxReport1.ShowReport;

posted on 2005-10-31 17:56  hize  阅读(1706)  评论(0)    收藏  举报