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,边界为0mm, SetDefaults 将導致页面边界设为 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;
浙公网安备 33010602011771号