Report Machine操作手册 联系客服

发布时间 : 星期三 文章Report Machine操作手册更新完毕开始阅读009a4450f01dc281e53af040

Report Machine(RM)报表控件简单用法

RM(Report Machine)是一个功能强大的Delphi报表控件包。使用它可以制作出非常复杂的报表。下面讲述最简单的用法:

在Form上放上两个数据库控件:ADOConnection和ADOQuery 设置好ADOConnection的ConnectionString。LoginPrompt=False。 ADOQuery的Connection指向ADOConnection。 ADOQuery的SQL设置好数据查询语句。

在Form上放上两个RM报表控件:RMDBDataSet和RMReport。 RMDBDataSet的DataSet指向ADOQuery。 RMReport的DataSet指向RMDBDataSet。

(如果想使最终生成的应用程序具备报表设计能力,还需要放上RMDesigner控件,不需要设置任何属性) 双击RMReport控件,开始设计报表模板。

对于一般比较规则的报表,只需向模板中加入四个Band对象,分别是: 1)、页标头:通常用来显示报表名称,时间等 2)、主项标头:通常用来显示栏目名称。 3)、主项数据:用来显示数据。 4)、页注脚:用来显示页号,日期等。

设计好的模板可以保存在DFM中,也可以保存到独立的模板文件中,扩展名为RMF,运行时调入。下面给出几个代码片断:

procedure TBrowseForm.Button5Click(Sender: TObject); var

RMReport:TRMReport; begin

if ADOQuery1.IsEmpty then Exit; try

RMReport := TRMReport.Create(Self); RMReport.LoadFromFile('Match.rmf'); RMReport.PrepareReport; RMReport.ShowReport; finally

RMReport.Free; end; end;

procedure TForm1.Button1Click(Sender: TObject); begin

RMReport1.ShowReport; end;

// 设计报表模板

procedure TForm1.Button2Click(Sender: TObject); begin

RMReport1.LoadFromFile('TTT.rmf'); RMReport1.DesignReport; end;

对于大多数规则的报表,以上知识就足够了。但这只是RM最简单的用法,远远没体现出RM功能的强大。 RM有两个吸引人的功能是我目前最需要的:

1)、数据可以来自数据库,也可以来自其它任何地方,如文件中、内存中等。

2)、不一定需要预先制作好模板,可以在运行时刻通过代码生成模板,这对于数据中字段个数不定的情况非常有用。

RM虽然功能强大,但用起来并不觉的很复杂,它是我见过的为数不多的报表控件中最好的一个。

1.对于一张纸要两面打的报表你有什么好办法? 打印时可以选择打奇数页还是打偶数页。

2.怎么能在一个页面中打印固定的条数,另外最后一页记录不够时怎么打出空白的格子出来啊. 固定条数:设置LinesPerPage

空白格子:设置AutoAppendBlank=True

3.怎样屏蔽双击报表进入设计报表的界面? RMReport1.ModifyPrepared := False 4.怎样在报表中增加表合计???

可以放在标题栏,页面设置中选\两遍报表\汇总框的TotalCalc=True即可

5.我想用代码把参数传递给报表中的某一个TRMMemoView该怎么做? RMReport1.FindObject(?Memo1?).Memo.Text := ?ddddd? 或者

RMVariables[?a1?] := ?ddddd?; //这样就可以在报表中使用变量?a1?了。 6.如何能够不打印重复内容?

Suppres=True

7.如何让打印预览时双击不能进入报表编辑器! 设置RMReport.ModifyPreview=False

8.如何在报表程序中控制MEMO的边框是否显示 在delphi中:

memo1.LeftFrame.Visible := False memo1.TopFrame.Visible := False; memo1.RightFrame.Visible := False; memo1.BottomFrame.Visible := False 在报表的script中

memo1.FrameTyp := 15; //这个参数多试几次就知道如何设置了 FrameTyp := 0; //不显示

9.怎样改变page的名称和控制它显示但不打印 可以,在Page1的OnBeforePrint中 begin

Page1.Visible := True;

Page1.Visible := False; //不显示

end;

10.Report Machine中,如何强制每3行一个表格 设置主项数据栏:LinesPerPage=3

如果三人一行有办法:设置主项数据栏的Columns=3 用分组打印,分组条件: NowLine > 3 在分组标头的OnBeforePrint: begin

NowLine := 1;

end;

在主项数据的OnBeforePrint: begin

NowLine := NowLine + 1; end;

11.能否只显示分组统计值而不显示分组数据? 可以,设置主项数据栏:Visible=False 统计框:CalcNoVisible=True

12.能否只对超过长度的单条记录进行折行? 可以,设置文本框:Stretched=True; wordwrap=True 设置文本框所在的栏:Stretched=True; Breaked=True 13.如何实现打印预览的问题

RMReport1.LoadFromFile(?c:1.rmf?); //读入报表 RMReport1.ShowReport; //预览 RMReport1.PrintReport; //打印 RMReport1.DesignReport; //设计

14.请问如何在程序中控制:1、纵向打印还是横向打印。2、分组标头是否每组换页。 1.RMReport1.Pages[0].ChangePaper()

2.RMReport1.Pages[0].FindObject(分组标头栏名).Prop[?NewPage?] := False; 15.直接打印的方法是什么? RMReport1.ShowPrintDialog := False;

RMReport1.PrintReport;

16.页边距改变以后,所有控件应该相应的改变位置。 需要在页面设置中不选\缩放到可打印区域\页面居中或 RMReport1.Pages[0].pgMargins := ; //这样试试

17.如何从导入一个rtf文件作为TRMFormReport的PageHeader var

TempStream : TMemoryStream; begin

TempStream := TMemoryStream.Create; RichEdit1.Lines.SaveToStream(TempStream);

TempStream.Position := 0;

RMFormReport1.PageHeader.Caption.LoadFromStream( TempStream); TempStream.Free; end;

18.怎样确定报表模版目录?

设置TRMDesigner的TemplateDir

19.我想动态设\虚拟数据集\该怎么设!

(RMReport1.FindObject(?Band1?) as TRMBandView).DataSet :=?RMDBDataSet1?; 20.在程序中

RMVariables[?aaa?] := form1.Caption; 在报表中就可以使用变量?aaa? 21.左边距:

CurReport.Pages[0].pgMargins.Left := Round(RMConvertToPixels(毫米 * 10, rmsuMM)) 22.RMVariables[?品牌?] :=True; RMVariables[?品名?] :=?计算机?;

在Page1的OnBeforPrint事件中的代码如下: If 品牌 Then

MessageBox(品名);

23.每页只打10条记录怎么处理啊?主项数据栏LinePerPage=10 24.怎么实现主项数据的统计啊???

最好用栏目注脚栏,在上面放统计框,然后设置CalcType即可 25.动态生成报表时,RM的页边距如何设定?

TRMPage.pgMargins := Rect(30, 30, 40, 40);

26.如何在程序运行时,在一个预览或者打印窗口中,一次打开多个报表文件 用TRMCompositeReport,