各位大哥,小妹请教:怎样才能将Dbgrid中的内容完整的打印出来,多谢。
解决方案 »
- filelistbox 控件下的文件清空
- 隐藏窗体的问题??????????????
- Delphi7 怎么把Excel中的数据指定导入SQL2000中的一个表里面吗?谢谢各位了!
- 表单上有一个image控件,我需要对bmp的canvas执行多次textout操作,即加上一些文字,每次操作前我想先使canvas上原来存在的内容去掉,我
- 关于查找字符的问题!?????????????????????????????????????????????????????????????????????
- sql求救!!!!!!!!!!!!!!!!!!!!
- 老大们,请看DBComboBox1
- 如何锁定DBGrid控件的前几列?
- DELPHI中如何使用十六进制数?
- 找个Delphi7好用的FastReport,最好有地址。。
- delphi读取word文件中的复选框???
- 怎样解决DLL中函数返回一个字符串时产生的'Invalid pointer operation'错误?
unit DbGridprint;
//直接打印DBGrid中的數據
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, Grids, DBGrids, ADODB,Printers,
ActnList, ComCtrls, ToolWin, ImgList, StdActns,Menus,
Buttons, DBCtrls, DbTables, Registry ;
type
TPrintDBGrid = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
DataSource1: TDataSource;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
DBGrid1: TDBGrid;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
PrintDBGrid: TPrintDBGrid;
implementation{$R *.DFM}procedure TPrintDBGrid.BitBtn1Click(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
if not ADOQuery1.Active then ADOQuery1.Open;
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:=poLandscape;
Printer.Canvas.Font.Name:='宋體';
Printer.Canvas.Font.Size:=10;
s:='ABC';
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;
Printer.EndDoc;
(DataSource1.DataSet).First;
Application.MessageBox('打印完成','打印',32);
end;
end;procedure TPrintDBGrid.BitBtn2Click(Sender: TObject);
begin
close;
end;end.