打印Grid类数据

有的时候,我们需要与Grid类的数据打交道,比如,你搜索到的结果,就显示在Grid类的组件上。

下列代码提供DBGrid的打印功能;

需要说明的是:提供数据控制的可以是DataSource,也可以是ADODataSet等等。

代码如下:

procedure Tfrm_sa.btn_print2Click(Sender: TObject); const LeftBlank=1; RightBlank=1; 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,LOGPIXELSY)/Screen.PixelsPerInch+0.5); printer.Orientation:=poPortrait; printer.Canvas.Font.Name:='宋体'; printer.canvas.Font.Size:=10; s:='xiaobin'; 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.BeginDoc; (DataSource1.DataSet).First; while not (DataSource1.DataSet).Eof do begin for i:=0 to DBGrid1.FieldCount-1 do begin if (x+DBGrid1.Columns.Items[i].Width*PointScale)<=(Printer.PageWidth-PointX*RightBlank) then begin Printer.Canvas.Rectangle(x,y,x+DBGrid1.Columns.Items[i].Width*PointScale,y+PrintStep); if y=PointY*TopBlank then Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns[i].Title.Caption) else Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields[i].asString); end; x:=x+DBGrid1.Columns.Items[i].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;//whil end printer.EndDoc; (DataSource1.DataSet).First; Application.MessageBox('打印完成','打印',32); end;//if end // end;

此代码,也可以改造打印ADO或者其他形式的数据!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值