获取页码(200分)

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

Dchou

Unregistered / Unconfirmed
GUEST, unregistred user!
打印报表后,怎样获取每条记录打印所在的页码数,即将打印页码填回原数据表,可待日后查找用。
 
你用的是什么啊!
 
太难了!基本上不可能实现!
给点分我吧!
 
加两个变量, 一个计页数pages, 一个计数据记录数,records,
以下是一个打印的程序段,我建议你在 换页 那段话下面加入
pages:=pages+1;
然后定义一个calculate的字段(计算字段)
把当前页的pages的值写入每一个记录, 并post


const LeftBlank=2;
RightBlank=2;
TopBlank=1;
BottomBlank=1;
var pointx,pointy:integer;
PointScale,PrintStep:integer;
s:string;
x,y:integer;
i:integer;
begin
PointX:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/2.54);
PointY:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSY)/2.54);
PointScale:=Trunc(GetDeviceCaps(Printer.Handle,LOGPIXELSX)/Screen.PixelsPerInch+0.5);
printer.Orientation:=poPortrait;
//poLandscape;poPortrait
printer.Canvas.Font.Name:='宋体';
printer.canvas.Font.Size:=10;
s:='信息';
PrintStep:=printer.canvas.TextHeight(s)+16;
x:=PointX*LeftBlank;
y:=pointy*TopBlank;
if ((DataSource1.DataSet).Active=true) and ((DataSource1.DataSet).RecordCount>0) then
begin
printer.begin
Doc;
(DataSource1.DataSet).First;
while not (DataSource1.DataSet).Eofdo
begin
for i:=0 to DBGrid1.FieldCount-1do
begin
if (x+DBGrid1.Columns.Items.Width*PointScale)<=(Printer.PageWidth-PointX*RightBlank)
then
begin
Printer.Canvas.Rectangle(x,y,x+DBGrid1.Columns.Items.Width*PointScale,y+PrintStep);
if y=PointY*TopBlank then
Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns.Title.Caption)
else
Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields.asString);
end;
x:=x+DBGrid1.Columns.Items.Width*PointScale;
end;
if not (y=PointY*TopBlank) then
(DataSource1.DataSet).next;
x:=PointX*LeftBlank;
y:=y+PrintStep;
//换页
if (y+PrintStep)>(Printer.PageHeight-PointY*BottomBlank) then
begin
Printer.NewPage;
y:=PointY*TopBlank;
end;
end;
printer.EndDoc;
(DataSource1.DataSet).First;
Application.MessageBox('打印完成','打印',32);
end;
end;
 
多人接受答案了。
 
后退
顶部