有关用空行补全页面(35分)

  • 主题发起人 主题发起人 nblgy
  • 开始时间 开始时间
N

nblgy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用QUICK REPORT打印数据表,如何在最后一页用空行补全页面,既最后一页的行数
和前面几页的行数一样多,不要使最后一页只打印半个页面。
 
要达到你想要的功能,最简单办法为建立临时表,把查询结果导入到临时表,然后插入空记
录进临时表。用完后,把临时表清除。如果非不用临时表,自己绘制,将会涉及到非常麻烦
的单元格绘制。你要单独绘制每一个QRLABLE,而不是QRDBTEXT。同时要注意每个QRLABLE的
高度,宽度,起始位置,换行等问题,而且要处理预览过程中,比例缩放问题。
你也可以考虑,换其他专门处理这种情况的其他报表工具。如fastreport,reportmachine。
实现起来非常简单。不需要写代码。

还有一种方法,这是seaflyboy的方法。我没有试。在quickreport中可以实现:
在mainform中:
uses printunit;

{$R *.DFM}

var i,k:integer;

procedure TmainForm.SpeedButton1Click(Sender: TObject);
var m,n:integer;
begin
printform.QRLabel11.Caption:=inttostr(i);
m:=i*34-k;//注:一页34条纪录
if m<>0 then begin
table1.DisableControls;
for n:=1 to m do
begin
table1.Insert;
table1.FieldByName('dwbm').asstring:='9999';//dwbm为所用数据表中一合适字段.
table1.Post;
end;
table1.Refresh;
table1.EnableControls;
end;
printform.QuickRep1.Preview;
end;

procedure TmainForm.FormShow(Sender: TObject);
var j:integer;
begin
k:=table1.RecordCount;
if (k mod 34)=0 then j:=0
else j:=1;
i:=((k-(k mod 34)) div 34)+j;
end;

end.

//以下为报表窗体的程序,printform
procedure TprintForm.QuickRep1AfterPreview(Sender: TObject);
var h:boolean;
begin
h:=true;
while h=true do begin
with mainform.Table1 do
begin
EditKey;
FieldByName('dwbm').AsString := '9999';
GotoKey;
if gotokey=true then delete
else h:=false;
end;
end;
end;

end.


 
接受答案了.
 
后退
顶部