关于fastreport中的有关打印的问题(150分)

  • 主题发起人 主题发起人 duanli
  • 开始时间 开始时间
D

duanli

Unregistered / Unconfirmed
GUEST, unregistred user!
我利用fastreport设计了一个报表,该报表中需要根据报表中的记录的不同类型,对该记录中的某个字段隐藏,而不用显示,我曾试图通过onpaint事件中写入代码来完成上述功能,但未达到实际的隐藏效果,如有哪位高手曾经做过的话,帮忙解决一下。
 
把你的情况具体说说。是动态生成还是静态的报表?...
一般来讲,当条件为真时,设置memo的Visible属性为false即可。
 
我的报表是动态生成的,而且是多表连查,比如说表中有一分类字段,报表中需要根据该字段的实际数据以不同格式显示,怎么做?
时间 内容 备注 分类
19:00 aaaa bb 1
cccc dddd 2
首先该表中的数据都有时间,但我的报表中要根据分类字段来确定是否显示时间字段数据,例如上表中分类为2的记录就不要显示时间字段
 
试试在 OnBeforePrint 中写代码,我也测试一下。

 
用ehlib吧很方便哦
 
我曾试图在onbeforeprint事件中写入,对其中的用来显示时间字段的类型为frichview,名字为Rich3的控件中写入事件,但未成功,不知是我哪里有错了。
代码如下:
EventType:=[DM.ADOQry."eventtype"];
//得到当前记录的分类
if EventType='2' then
rich3.memo.memo:='';
但好像不成功,时间字段都显示了出来。还请各位多多帮我测试一下。
楼上有人说ehlib,请问这是啥?是另外一个控件吗?我还是希望用fastreport
来解决。
 
将就的方法:那么你在查询生成数据时候把符合那个条件的数据赋空值。
 
to duanli
你这哪里是动态生成报表?!看看/demos/runtime,什么是“动态”,害我1小时时间!
解决方法如下:
--------------
1. 先通过“数据字典”建立一个变量[eventtype],并关联到DM.ADOQry."eventtype"
(先点一下eventtype,再点一下DM.ADOQry."eventtype"即完成关联)
2. 点击Rich3的memo,在弹出的窗口下方(script)中输入:
begin
if [eventtype]='2' then
visible:=false
else
visible:=true;
end
------
题外话:提问时一定要讲清楚自己的问题,以免浪费各自的时间。如果真是动态生成报表,
问题还不好解决。
 
To ty123:
您好,我根据您的注释在程序中实现了该功能,但是还有一点点的小问题,就是将visible 的属性改为false后,我报表中的memo有关的边框没了。我是否可以将memo的内容该为‘’,即为一个空值,而不是将其visible的属性置为false,这种情况下,代码如何写?
还有我的报表设计如下:
页头
分头组
主项数据
分脚组
子(child)
在分组脚中onbeforeprint中的代码如下:
while (Freespace>50)do
begin
showBand(child1)
end
end
child1为一个设置好的表格行,高度定为某一基础的表格高度,这样当内容不足一页时,我会自动的在后面补上该child1,形成一个类似于表格的样式,但问题是我无法将某些在frRichView控件中显示的内容在大于一行的情况下,将内容按照child1的高度自动将文本分成相应的行,并用横线分开。如下所示,希望显示的效果:
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
----------------------------------------------------------------
dd
----------------------------------------------------------------
现在我的显示效果是
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
dd
----------------------------------------------------------------
这个问题困惑我很久了,如果您能为我解决的话,分好说,我还将给您加分。
 
我现在的系统中就有这段代码,但是一言两语说不清,如果你需要我可以给你讲讲我的思路,和我写的一个函数。
 
to hnlygtjj
好的,我给你个邮箱,地址为duanlidragon@vip.sina.com。[:)]
 
搞什么,把你的那个显示时间的memo 单击右键压缩重复值就ok了
 
啥意思,压缩重复值?
 
我知道你的意思了,对不起,第一次没看清楚,不需要那么复杂的。
在TfrReport的OnGetValue中写代码。
这是我程序中的一段代码你看看,可能对你有用。
procedure Tfrayw_ddcx.frpyw_ddcxGetValue(const ParName: string;
var ParValue: Variant);
begin
if ParName = 'adoq_ddcx."jsfs"' then
begin
if not adoq_ddcx.FieldByName('jsfs').IsNull then
begin
case adoq_ddcx.FieldByName('jsfs').AsInteger of
1: ParValue := '按数量计算';
2: ParValue := '按体积计算';
end;
end;
end;
if ParName = 'adoq_ddcx."ddxz"' then
begin
if not adoq_ddcx.FieldByName('ddxz').IsNull then
begin
case adoq_ddcx.FieldByName('ddxz').AsInteger of
1: ParValue := '新订单';
2: ParValue := '索赔订单';
3: ParValue := '来料自加工';
4: ParValue := '来料外加工';
5: ParValue := '订单转发';
end;
end;
end;
end;
 
To hnlygtjj
您好,看到您的代码,但由于ongetvalue函数我没有用过,但是你的代码我基本明白意思,即根据输入参数的不同,返回不同的parvalue值,我的程序实际上也是根据得到数据集中的某一个字段,来动态的控制另一个字段的显示值,比如如果其中有一个字段的值为‘XX值班’时,我需要控制另一个时间的字段的内容,即原来有时间的,我需要将它重新更改值后再显示,所以我想问您的是,得到的parvalue如何使用?朋友可否说得更清楚些?谢谢
 
OnGetValue是TfrReport的一个事件, parvalue是在报表中要显示的值,按你的意思应该在OnGetValue事件中是这样的:
if ParName = 'dataset."值班时间字段"' then
begin
if not dataset.FieldByName('值班人员字段').IsNull then
begin
if dataset.FieldByName('值班人员字段').AsString = '**值班' then
ParValue := '2003-09-15';//在这里改这你需要的值,而不是从数据集中取值
end;
end;
 
to duanli
>>这种情况下,代码如何写?
---------
begin
if [eventtype]='2' then
Rich3.memo:=''
else
Rich3.memo:=[YourQuery."时间字段"];
end
---------
 
在这里衷心感谢以上回答我问题的各位朋友,特别是ty123和hnlygtjj,最终我按照hnlygtjj的方法实现了上面的功能,但是我想在我的报表中我需要实现以下的显示效果,即
在个别字段内容大于一行的情况,能够自动加上横线,形成表格的样式。具体的情况如下:
还有我的报表设计如下:
页头
分头组
主项数据
分脚组
子(child)
在分组脚中onbeforeprint中的代码如下:
while (Freespace>50)do
begin
showBand(child1)
end
end
child1为一个设置好的表格行,高度定为某一基础的表格高度,这样当内容不足一页时,我会自动的在后面补上该child1,形成一个类似于表格的样式,但问题是我无法将某些在frRichView控件中显示的内容在大于一行的情况下,将内容按照child1的高度自动将文本分成相应的行,并用横线分开。如下所示,希望显示的效果:
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
----------------------------------------------------------------
dd
----------------------------------------------------------------
现在我的显示效果是
--------------------------------
a b c
----------------------------------------------------------------
c d f
----------------------------------------------------------------
dd dd dd
dd
----------------------------------------------------------------
如果有哪位朋友乐意为我解决的话,我可以另开一个帖子,再给分。
 
多人接受答案了。
 
在 dd 的下面用画线工具画一条线就可以了
 
后退
顶部