delphi FastReport学习笔记
安装教程:http://t.zoukankan.com/liessay-p-5321278.html
这里给大家提个醒: 以管理员身份运行.如果你想要使用中文版,需要在选择中文时,马上点一下compile,然后再选择Recompile all packages 再点一下compile
如果你打开fastReport后还是英文版,可以再次打开此程序,按上面红字操作一下就可以了,不需要重装.
下载地址:能看到这里的,应该不差包
一.配置好数据库,这个不是本文的重点,就不详述了.
二.界面设计.大致如下图.略
三.使用报表控件与数据集建立连接.
1.使用 TfrxDBDataset控件 连接数据集,这里有两个选择,一个来源于查询,一个来源于数据集,按业务需求 二选一
2.使用 TfrxReport 控件 关联 TfrxDBDataset控件.从数据库连接算下来,相当于套了5个控件,才能把报表展示出来...简直了!
四.数据表的别名设置.你最好在最开始时修改好,不然后期修改的话可能要费一些工夫.
双击 frxDBDataset1 控件,即可弹出别名管理器
你也可以在 frxDBDataset1 左边属性面板的 FieldAliases属性中设置,这里是一个很重要的属性,日后代码操作中必不可少.
五.用报表向导建立一个报表(初学者推荐).
1.双击 frxReport1 进入报表设计界面
file---new...选择标准报表-ok
--设置数据集(一会默认)--next
-选择用到的字段-- next
分组设置--next
格式设置--next
样式设置--Finish
六.报表的结构.
报表主要分为四部分结构,头和尾按业务需求来选用.务必搞清楚各部分的出现方式

各结构如果误删了,可以从左边的工具栏中,重新添加
七.手动创建报表.
这也是为什么我要先讲报表结构的原因;只有了解了报表结构,才能知道什么地方可以放什么数据.
1.添加页首.新建的报表中是没有页首的,需要的动添加.
2.关联数据集.这里分两步.
2.1 报表---数据-- 选择数据库
点中左边面板上的,此时鼠标会变成一个大 十字 ,后面跟着一个虚框,点在主数据上,这样主数据里面就插入了一个memo,同时,它还弹出了一个文本编辑器.我们在右边随便选中一个要显示的字段,就变成了这样:
然后我们点击预览.啊西吧!什么鬼!为什么会是空白?!明明有数据集是有数据的呀!
2.2.指定数据集.原来是因为,我们还要再次指定数据集才可以正常显示:双击主数据右边的小图标进行指定,最终变为就可以了,此时 我们再点预览就可以看到报表数据啦
2.3Memo的复杂用法.这里需要注意:字符串连接不需要连接符
(更正:下图中,6那里我点错字段了,应该点参考库存,因为规格型号不能计算)
3.设计技巧.
3.1先算好要展示几个字段,然后在主数据里插入一个memo,设置好字段值,然后复制出N个,再排列,设置好值,调整好列宽.就不用一个个插入啦
3.2框选主数据里的所有字段,然后复制到页首里面,再一个个改为普通文字标题,这样就不用担心列宽与主数据列宽不一致了.
3.3页首里的所有memo底部都应该要与页首重合,不然会与主数据产生间隙.顶部可以不重合,甚至还可以插入页码什么的,像这样(素材来源:学习大师)
3.4主数据里的memo行高,如果是要制作表格格式的报表,最好行高与主数据高度一致,否则行数据之间会有间隙;
3.5所有的memo默认都不是垂直居中,设置边框线后,下一个memo会被套用之前的边框线设置.
3.6合理使用工具栏上的工具,更能事半功倍.
3.7.所有结构都是可以拉伸高度的.除了主数据外,其他结构占的高度越大,数据显示得就越少.主数据拉伸的越高,行距就越大!
4.实用小技巧.
4.1 隐藏 0 数据: 选择主数据里的字段,在左边设置HideZero为True;
4.2 设置序号(行号): 在主数据里插入一个memo,设置文本里选择 [变量] -- [Line#];
4.3 页码设置: 多关注变量这个选项卡 第 [Page#] 页,共 [TotalPages#] 页;
4.4 可以自定义自己需要的格式:
4.5 隔行变色
4.6自动行高设置.
4.6.1 、选择主数据,在左边面板找到stretched ,并设置为True
4.6.2、把主数据下的所有字段框选,设置属性 wordwrap为True ,stretchMode:smMaxHeight
4.7 函数的使用
例一.参与计算的字段,要用尖括号.表示表达式运算的字符,要用中括号括起来
错误: [FormatDateTime('yyyy-mm-dd',[frxDBDataset1."日期"])]
---------------------------------------------------------------------------------------------
正确: [FormatDateTime('yyyy-mm-dd',<frxDBDataset1."日期">)]
例二:所有没有包含在中括号里的字符,都不会参与运算,会被当做字符串拼接显示出来
错误: [Length(<申购清单."物料代码">)]-6
正确: [Length(<申购清单."物料代码">)-6]
例三: 中括号里面不能再有中括号
错误:[copy(<申购清单."物料代码">,[Length(<申购清单."物料代码">)-5],6)]
正确:[copy(<申购清单."物料代码">,Length(<申购清单."物料代码">)-5,6)]
八.分栏打印.实现一页打印两栏
8.1 文件------页面设置
8.2 把页首里的标题,复制一份到右边.如果没有这一步,右边的数据将不会显示标题
九.制作卡片式标签.(素材来源:学习大师)
9.1先看效果图,这里分了两栏
9.2主数据图:
9.3 绘制边框.
绘制后要把边框置于底层,不然会挡住主数据,导致点选不到主数据.
十.每页小计.这里介绍两种方法
10.1 文本对象法.在页尾插入.
推荐使用这种方法,因为这种方法还可以设置数字格式
干货:
数字在自定义格式时,与EXCEL的自定义格式很像 : 正数;负数;0
如果你不想让 0 展现在报表上,可以这么写: 0;-0;'' 也就是把0变为空.
如果你只想让数字保留两位小数,可以这么写: 0.##;-0.##;0
10.2 在左边面版中找到系统文本,插入到页尾中.设置你需要的功能(表达式是可选的)
确定后,再双击这个memo,你会发现它变成了文本.此时你可以在这串文本前后拼接其他字符,比如 本页小计 : 什么的.
十一.打印报表
procedure TForm1.打印Click(Sender: TObject); begin //断开与数据集的联系,否则会出现逐行扫描的现象 DM.FDQuery1.DisableControls;
//frxReport1.PrintOptions.Printer := 打印机名称; //设置打印机
//不显示打印机调用界面,不需要用户确认,直接使用默认打印机进行打印 // frxReport1.PrintOptions.ShowDialog :=False; frxReport1.PrepareReport(); //准备报表 frxReport1.Print; //调出打印机界面 //恢复与数据集的联系 DM.FDQuery1.EnableControls; // 使数据集跳到第一行 DM.FDQuery1.First; end;
十二.打印预览
procedure TForm1.预览Click(Sender: TObject); begin //断开与数据集的联系,否则会出现逐行扫描的现象 DM.FDQuery1.DisableControls; //报表预览 frxReport1.ShowReport(); //恢复与数据集的联系 DM.FDQuery1.EnableControls; // 使数据集跳到第一行 DM.FDQuery1.First; end;
十三.使用户在运行程序时,可以自定义报表.
在这之前,我们需要插入一个 TfrxDesigner 控件,这货只是个工具插件,用 frxReport1.DesignReport()方法调用即可,不用理它
procedure TForm1.报表设计Click(Sender: TObject); begin frxReport1.DesignReport(); end;
十四.让用户切换报表模板
frxReport1.LoadFromFile(报表路径+文件名); //后缀名 .fr3
十五.按条件求和.
案例:求和 [字段A] 值为 '1' 的项
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库