请问各位,此种报表,FR如何实现??? ( 积分: 200 )

  • 主题发起人 主题发起人 xhr
  • 开始时间 开始时间
X

xhr

Unregistered / Unconfirmed
GUEST, unregistred user!
要实现的效果,如图:http://www.kingsuns.com.cn/123.jpg<br>其中,上面是人员基本信息,下面是简历等各种明细信息<br>显示数据,可以通过主/明细来显示,<br>但左边的“简历”二字要随着明细行而居中,请问各位,如何处理??
 
请高手指点!!
 
哪些是作為主表的哪些是作為從表的,能說一下嗎??
 
这个图中,只有简历那部分是从表,上面都是主表!
 
写一个脚本,在相应的事件中计算一下“简历”总条数的高度,然后再动态更改相关文本的位置,我想应该可以吧
 
TO&nbsp;snail2233:脚本试过了,没反应,能否列一下!
 
自己顶起来!
 
如果是FR&nbsp;&nbsp;2.52的版本(其他版本我没装,应该可以比照着解决)<br>方法如下:<br>1、打开&nbsp;fr_Class.pas,&nbsp;<br>constructor&nbsp;TDatabaseFunctionLibrary.Create;<br>begin<br>&nbsp;&nbsp;inherited&nbsp;Create;<br>&nbsp;&nbsp;with&nbsp;List&nbsp;do<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;Add('FIELDISNULL');<br>&nbsp;&nbsp;&nbsp;&nbsp;Add('BANDHEIGHT');&nbsp;&nbsp;&nbsp;//添加这个函数<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;AddFunctionDesc('FIELDISNULL',&nbsp;frLoadStr(frRes&nbsp;+&nbsp;2620),&nbsp;frLoadStr(frRes&nbsp;+&nbsp;2621));<br>&nbsp;&nbsp;AddFunctionDesc('BANDHEIGHT',&nbsp;&nbsp;frLoadStr(frRes&nbsp;+&nbsp;2620),&nbsp;'BANDHEIGHT(&lt;BandDSName&gt;)/取当前带区数据集的打印高度');&nbsp;&nbsp;//Levi<br>end;<br><br>procedure&nbsp;TDatabaseFunctionLibrary.DoFunction(FNo:&nbsp;Integer;&nbsp;p1,&nbsp;p2,&nbsp;p3:&nbsp;Variant;<br>&nbsp;&nbsp;var&nbsp;val:&nbsp;Variant);<br>begin<br>&nbsp;&nbsp;val&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;case&nbsp;FNo&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;0:&nbsp;val&nbsp;:=&nbsp;frFieldIsNull(frParser.Calc(p1));<br>&nbsp;&nbsp;&nbsp;&nbsp;1:&nbsp;Val&nbsp;:=&nbsp;frBandHeight(p1);&nbsp;&nbsp;&nbsp;//在这里添加接口<br>&nbsp;&nbsp;end;<br>end;<br><br>打开&nbsp;FR_Utils.pas<br>添加如下函数,(注意在implementation前加函数头)<br>Function&nbsp;frBandHeight(DBName:&nbsp;String):&nbsp;Integer;<br>var<br>&nbsp;&nbsp;DS&nbsp;:&nbsp;TfrTDataSet;<br>&nbsp;&nbsp;H,&nbsp;tpVal&nbsp;:Variant;<br>begin<br>&nbsp;&nbsp;Result&nbsp;:=&nbsp;0;<br>&nbsp;&nbsp;if&nbsp;OPTName(DBName)=''&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;CurReport.UseDefaultDataSetName&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DS&nbsp;:=&nbsp;GetDefaultDataset<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DS&nbsp;:=&nbsp;nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;DS:=frGetDataSet(OPTName(DBName));<br>&nbsp;&nbsp;if&nbsp;DS&nbsp;&lt;&gt;&nbsp;Nil&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;Result:=Ds.RecordCount;<br>&nbsp;&nbsp;H&nbsp;:=&nbsp;CurView.Prop['HEIGHT'];<br>&nbsp;&nbsp;if&nbsp;not&nbsp;VarIsNull(H)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;Result&nbsp;*&nbsp;H;<br>&nbsp;&nbsp;CurReport.GetVariableValue('FREESPACE',tpVal);<br>&nbsp;&nbsp;if&nbsp;Not&nbsp;VarIsNull(tpVal)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Result&nbsp;&gt;&nbsp;tpVal&nbsp;then&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;tpVal&nbsp;-&nbsp;tpVal&nbsp;mod&nbsp;H;<br>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CurView.FrameTyp&nbsp;:=&nbsp;CurView.FrameTyp&nbsp;and&nbsp;13;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>重新编译一下工程,然后在报表设计器里面就可以看到函数&nbsp;BandHeight,<br>然后在需要伸展的memo的脚本里面写上<br>BEGIN<br>&nbsp;&nbsp;Height&nbsp;:=&nbsp;[BANDHEIGHT(ReportDetail)];&nbsp;&nbsp;<br>END<br>ReportDetail是当前BAND的数据集的名称<br><br>注意这个MEMO的属性需要把&nbsp;&nbsp;扩展的属性设为FALSE,否则会与第一行的高度相同。<br>把压缩重复值设为TRUE<br>报表采用主从表或分组表均可实现<br><br>存在的问题:<br>1、如果右边的明细的高度自动折成1行以上,则左边的合并格子高度会有误,所以需要控制右边的内容都能在一行内打完<br>2、如果合并的表格正好处于2页之间,则第二页对应的前面不再有相应的表格。
 
用RM,只要设置TRMMemoView的RepeateOptions属性就可以了。
 
用RM,只要设置TRMMemoView的RepeateOptions属性就可以了。
 
请采用用友的华表构件,功能很强,适合中国人的使用习惯<br>http://www.cellsoft.cc/
 
用levi的方法好像不行,而且存在那2个问题也不能解决!
 
最简单的方法就是:<br>上面的放在表头或页头<br>下面的放在数据区
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部