分页...(50分)

  • 主题发起人 主题发起人 王淳霞
  • 开始时间 开始时间

王淳霞

Unregistered / Unconfirmed
GUEST, unregistred user!
在QuickRep中,应用QuickRep.CurrentY属性及Bands.newpages
或Bands.newColumns属性如何实现灵活分页,即怎样计算CurrentY值?
为什么我算的分页不准确?
 
为什么对qr情有独钟,换换吧;bk怎么样了
 
说说你想实现什么吧!
在QR中, 用NewPage的方法可以实现动态的强制分页. 但帮助中是这样写的:
Call NewPage from event handlers during report generation to
move to the next page of the report. This method can safely
be called from any band BeforePrint event or AfterPrint event
but should not be called from a printable controls OnPrint
event or a OnStartPage or OnEndPage event.
也就是说, 并不是所有的事件中都可以安全的调用NewPage的方法. 至于
CurrentY , 我不知道你为什么需要这个属性. 说说看好吗?
 
首先感谢各位关注!
是这样的,我在BeforePrint和AfterPrint中安全的
调用了CurrentY属性,实现了Bands.forcenewPage...
但是,为了使QRGroup,QRSubDetail和QRBand(Footer)
一组Band,在页内合理、完整的显示,如:作为标题的QRGROUP
不会孤立地显示在页末,同理作为合计的GROUPFOOTER也不会
孤立地显示在页首,我除了在QRgroup.BeforePrint时计算
CurrentY外,没有什麽更好的办法了。

注:我用的是QR2.0K,好像QR2.1(我没有)以上才有linkBand属性。
 
首先感谢各位关注这个话题!
是这样的,我在BeforePrint和AfterPrint中安全的
调用了CurrentY属性,我想根据当前table中的记录是否EOF,
同时计算CurrentY值,实现Bands.forcenewPage...,
可不知内部单位换算?
这么做主要是为了使QRGroup,QRSubDetail和QRBand(Footer)
一组Band,在页内合理、完整的显示,如:作为标题的QRGROUP
不会孤立地显示在页末,同理作为合计的GROUPFOOTER也不会
孤立地显示在页首,我除了在QRgroup.BeforePrint时计算
CurrentY外,没有什麽更好的办法了。

注:我用的是QR2.0K,好像QR2.1(我没有)以上才有linkBand属性。
 
对于GroupHead 的在页尾的处理, 你可以在 GroupHead Band 的
BeforePrint 事件中使用如下例子 :
procedure TForm1.QRGroup1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
if QuickRep.CurrentY > 2000 then

QuickRep.NewPage;
//另起一页
end;

CurrentY的单位是 1/10毫米 ,
同时你可以根据具体的情况灵活设定分页条件.
我在Delphi 4下试验成功.
 
作为合计的GROUPFOOTER孤立地显示在页首,怎样控制?
谢谢seasky
 
班主 答案不满意怎么办?
 
第二个问题好象比较难解决, 问题是QuickReport 从
前往后进行排版 , 如果一个Group 正好不够排Group Foot,
QuickReport 会自动排到下一页, 也就形成了Group Foot 在
页首.
针对上述问题, 可以通过在Detail Band 的BeforePrint 中
测试Currenty已经不够打印
最后一条Detail Band 和Group Foot,
并且 Group 已经到达最后一条, 这种情况下执行NewPage.
不过, 这种方法排版较慢.
procedure DetailBandBeforeprint(......)
Var CurGroupValue :somevalue ;
begin

if CurrentY >2000 then
begin
//具体数值你看着办
curGroupValue := DateSet.Xfieldvalue;
Dateset.next ;
if Eof then
//没有
newpage ;
else
if (curGroupValue <> DateSet.Xfieldvalue) then
begin
//和前面不同 prior ;
NewPage;
end else
begin

prior ;
end;
end ;
end;

只提供了思路, 具体怎样, 你试一下吧.
 
写的匆忙, 没仔细看, 改错如下:
procedure DetailBandBeforeprint(......)
Var CurGroupValue :somevalue ;
begin

if CurrentY >2000 then
begin
//具体数值你看着办
curGroupValue := DateSet.Xfieldvalue;
Dateset.next ;
//下一条记录
if dateset.Eof then
//没有数据了
newpage ;

else
if (curGroupValue <> DateSet.Xfieldvalue) then
begin
//和前面不同的Group
prior ;
//返回原记录
NewPage;
//换页 打印当前记录 你的Group foot自然就在新页的第二行了。
end else
begin

prior ;
//返回原记录
end;
end ;
end;

 
接受答案了.
 
后退
顶部