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

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,
RMCompositeReport1.Reports.Clear;
RMCompositeReport1.Reports.Add(RMReport1);
RMCompositeReport1.Reports.Add(RMReport2);
RMCompositeReport1.ShowReport;
27.rm如何进行套打
Page1不是有个BackGroundPic属性吗,这个就是专门做套打的
28.GridView1 能象Microsoft Excel
实现 a3=a1+a2吗?
可以,a3内容
[memo1.CalcValue + memo2.CalcValue]
29.
使用总页数,将CalcMemoView放在页头,组头,栏目头时需要选择"两遍报表",对打印没影响,只打印一遍.
30.如何打印中括号如: [2002]
在memoview的OnBeforePrint中
begin
memo := ‘[2002]‘;
end;
或者把‘[‘,‘]‘定义成变量:
RMVariables[‘a1‘] := ‘[‘;

RMVariables[‘a2‘

report machine开发使用手册-创建报表2010-02-10 13:08

创建报表:

创建一个报表由下面几步组成:

1、选择数据:选择报表中用到的数据源

2、设计报表模板:利用区域(称为Band)将报表分布不同的部分,决定报表样式。

3、处理:用报表内置脚本语言或在delphi中对报表中用的的数据,报表模板等进行处理

4、生成报表:根据报表模板+数据源,生成最终的报表。

选择数据源:

大多数报表需要的数据都是来自数据库。TTable和TQuery组件可以作为报表的数据源。总的来说它可以使用任何一个从TDataSet组件继承的子类。每个报表中用到的TDataSet都要有一个与之对应的TRMDBDataSet。

除了TDataSet,ReportMachine页可以使用任何数据源(数组,文件,字符网格等等)。在这种情况下,程序必须自己控制非数据库源的存取。你可以用TRMUserDataSet方便地把数据传送到报表中。

设计报表模板:

报表模板本身就是描述怎样可以看到正确的报表。每个报表模板由多个区域组成,ReportMachine把这些区域称为"Band"。有两种类型的Band:固定区域Band(比如报表标题,页标头,页注脚等等)和用于显示数据集中所有记录的Band(比如主项数据栏)。数据Band需要联接到数据源,内容是数据源中的记录。

在ReportMachine中提供了报表开发的可视化环境(报表设计器,这个设计器也可以提供给你的End User,以方便你的End User自己修改报表模板)用于创建报表。报表设计器功能强劲,简单又易于使用。报表设计器的界面由带有浮动的工具栏,可以自由地改变它们的位置,使用对象观察器(Objects Inspector)可以控制对象的属性,类似于Delphi IDE中的那个。

处理:

在生成报表的时候,需要对输入的数据进行某种处理(比如格式化),报表模板需要某些修改(比如报表模板中某个文本框需要改变字体)。

实现这个处理可以在Delphi中的TRMReport的事件处理中编写代码,这个方法并不通用,因为它不允许在Delphi外创建报表而无需重新编译。这就是为什么在ReportMachinet中内置脚本语言,ReportMachine的内置脚本语言非常类似于Object Pascal,功能强大。用这个脚本语言编写事件处理代码,这就可以让你创建复杂的处理而无需在Delphi中编写代码,配合报表设计器,不需要修改某个报表而重新编译项目。可以实现报表于你的项目分离。

报表脚本例子:

unit Report;

interface

procedure Memo1OnBeforePrint(Sender: TObject);
implementation

procedure Memo1OnBeforePrint(Sender: TObject);
begin
Memo1.Text := ‘test‘;
end;

procedure Main;
begin

end;

end.

生成报表:

生成报表是ReportMachine根据报表模板,对数据源进行加工处理生成最终的报表并能在点击“预览”按钮后进行预览的过程。在ReportMachine中准备好的报表是一组对象的集合,描述报表处理后各页面所包含的内容。这允许你可以修改生成的报表页面,通过在设计器中调用所需的页面。除此之外,还可以描述在预览窗口中鼠标点击对象的反应。这将让你更容易地组织你的工作(在一个报表对象点击可以产生一个更详细的新报表)。

在ReportMachine的预览窗口类似于Microsoft Word:在一个窗口中可以看到多个页面,并且可用用鼠标拖动,需要的话,可以通过双击调出编辑器修改当前页。

时间: 2024-12-14 18:45:22

Report Machine(RM)报表控件简单用法-delphi的相关文章

C++ double转string类型以及MFC控件简单用法

这两天项目需要,测试c++库里面内容.生成jar再给Android调用.我没有学过C++,现在开始记录C++简单用法.测试时候一般都是使用mfc程序来测试,要输入值,显示结果吗.我用的编译环境vs2008. 一.double 转string #include <string> CString strResultx; strResultx.Format(_T("x:%.4f\n"), 89.7887878); 转换结果还是放在strResultx 2.两个字符串相连 CStr

VC2015调用Grid++report报表控件

Grid++report这是一个国产报表控件,从2.x就开始接触,基本所有的学习资源,来自于自带的文档和例子.能学多少靠摸索.整体功能还是不错的.他提供了3个控件,一个组件.在VC2015如果不想用控件,只想调用组件实现打印的功能,怎么办呢?步骤如下: (1)在afxstd.h文件中包含头文件如下: #include <atlbase.h> extern CComModule _Module; #include <atlcom.h> (2)在程序APP文件中,声明如下: CComM

UniGui中使用Grid++Report报表控件子报表获取数据的方法

Grid++Report是为优秀的报表控件,子报表是其重要功能之一,但Grid++Report提供的网页报表示范主要是以页面为主的,UniGui在Delphi中以快速编写web管理软件著称,但由于资料文档很少,经过摸索,Grid++Report的子报表要在uniGUi中正确获取子报表数据,只能通过Ajax数据回调的方式进行,在uniGUi中对前端Ajax的响应,就要是通过控件的AjaxEvent事件来处理.报表模板的展示部分的HTML代码要放在UniURLFrame控件的HTML属性中.Ajax

ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源

?? 本系列文章主要是面向初次接触 ActiveReports 产品的用户,能够帮助您在三天之内轻松的掌握ActiveReports控件的基本用法,包含安装.激活.创建报表.绑定数据源以及公布等内容.本篇文章我们就从安装产品開始带您开启轻松的 ActiveReports 体验之旅. 系列文章列表: ActiveReports 报表控件官方中文新手教程 (2)-创建.数据源.浏览以及公布 ActiveReports 报表控件官方中文新手教程 (3)-怎样选择页面报表和区域报表 本文内容包含: 安装

只用最适合的!全面对比主流 .NET 报表控件

前言 随着 .NET 平台的出现,报表相关的开发控件随着而来,已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件:水晶报表.FastReport.ActiveReports 和 Stimulsoft,给所有报表开发人员在做产品选型时一份全方位的参考. 为什么需要报表控件 因为微软在中国几十年的推广,.NET作为很多开发团队开发商业项目时首选的开发平台.随着对 Visual Studio IDE的使用,很多开发人员已经习惯了在 VS中完成大量代码的可

只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft

原文:只用最适合的! 全面对比主流 .NET 报表控件:水晶报表.FastReport.ActiveReports 和 Stimulsoft 前言 随着 .NET 平台的出现,报表相关的开发控件随之出现,目前已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件,给所有报表开发人员在做产品选型时一份全方位的参考. 为什么需要报表控件 数据报表,作为商业系统中必不可少的功能(或者成为模块),随着这些年大数据.BI.数据决策的流行,数据报表也逐渐成为商业系

全新的针对移动平台而设计的报表控件 Stimulsoft Reports.Mobile

Stimulsoft Reports.Mobile控件是一款全新的针对移动平台而设计的报表控件,产品基于HTML5和WinRT技术开发,开发人员可使用该产品在平板电脑.智能手机上开发商业应用程序.数据呈现,强大的报表设计器可以设计极为复杂的报表,该产品不紧对开发人员简单易用,最终用户也可轻易上手.具体功能: 无需额外的插件安装 Stimulsoft Reports.Mobile是基于HTML5技术创建,并不需要在浏览器安装额外的插件或者控件,在开始前不需要其他额外的步凑,产品由两部份组成,一部份

ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表

原文:ActiveReports 报表控件官方中文入门教程 (3)-如何选择页面报表和区域报表 本篇文章将介绍区域报表和页面报表的常见使用场景.区别和选择报表类型的一些建议,两种报表的模板设计.数据源(设计时和运行时)设置.和浏览报表的区别. ActiveReports 报表控件官方中文入门教程 (1)-安装.激活以及产品资源 ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 本篇文章包括以下部分: 1.区域报表和页面报表的区别 两种报表的具体应用场景 区

ActiveReports 报表控件官方中文入门教程 (1)-安装、激活以及产品资源

原文:ActiveReports 报表控件官方中文入门教程 (1)-安装.激活以及产品资源 本系列文章主要是面向初次接触 ActiveReports 产品的用户,可以帮助您在三天之内轻松的掌握ActiveReports控件的基本使用方法,包括安装.激活.创建报表.绑定数据源以及发布等内容.本篇文章我们就从安装产品开始带您开启轻松的 ActiveReports 体验之旅. 系列文章列表: ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 ActiveRepo