如何打印dbgrid中的数据....(50分)

  • 主题发起人 主题发起人 why_119
  • 开始时间 开始时间
W

why_119

Unregistered / Unconfirmed
GUEST, unregistred user!
如何打印dbgrid中的数据....
 
好像东日工作室 有一个专门的工具 RM好像也可以
 
在那下.....
 
用EhLib的表格控件。
 
EhLib我没有...我有QuickRep1不知可以不....
 
用QuickRep就可以了
 
既然是dbgrid那肯定会有DataSet,在Delphi中的打印控件都可以的
 
你在窗体上放一个PrintDialog控件,直接打就可以了。
if PrintDialog1.Execute then
begin
if (PageControl1.ActivePage = TabSheet1) then
begin
PrintDialog1.Options := [poPrintToFile, poPageNums, poSelection, poWarning, poHelp, poDisablePrintToFile];
with Printerdo
begin
begin
Doc;
DBGrid1.PaintTo(Handle, 10, 10);
EndDoc;
end;
end;
 
procedure printdbgrid(dg:tdbgrid);
var
pl,pr,pt,pb:integer;//页边距
px,py:integer;//打印机分辨率
ps:integer;//打印机与显示器分辨率之比
lh:integer;//行高
i:integer;
x,y:integer;//打印坐标
rowb,colb:integer;//行距,列距
begin
//初始化界面
pl:=1;
pr:=1;
pt:=1;
pb:=1;
rowb:=6;
colb:=6;
//将打印机的分辨率由厘米转换为英寸
px:=trunc(GetDeviceCaps(printer.handle,LOGPIXELSX)/2.54);
py:=trunc(GetDeviceCaps(printer.handle,LOGPIXELSY)/2.54);
//将屏幕分辨率转换为打印机
ps:=trunc(GetDeviceCaps(printer.handle,LOGPIXELSY)/screen.PixelsPerInch);
//设置打印方向
Printer.Orientation:=poPortrait;//纵向打印
//获得打印机的字体和大小
Printer.Canvas.Font.Name:='宋体';
Printer.Canvas.Font.Size:=10;
Printer.Canvas.Font.Color:=clRed;
Printer.Canvas.Pen.Color:=clBlue;
//设置行高
lh:=Printer.Canvas.TextHeight(dg.Font.Name);
//打印的起始位置(打印机画布上的位置)
x:=px*pl;
y:=py*pl;
//打印dbgrid的内容
if (dg.DataSource.DataSet.Active) and (dg.DataSource.DataSet.RecordCount>0) then
begin
//设置打印机的标题
printer.Title:='表格内容打印';
with printerdo
begin
begin
doc;
dg.DataSource.DataSet.First;
while not dg.DataSource.DataSet.Eofdo
begin
for i:=0 to dg.FieldCount -1do
begin
//设定打印的宽度
if (x+dg.Columns.Items.Width*ps)<=(pagewidth-px*pr) then
begin
//画出表格线
printer.Canvas.Rectangle(x,y,x+dg.Columns.Items.Width*ps,y+lh);
//如果第一行,打印db的标题
if y=py*pt then
canvas.TextOut(x+rowb,y+colb,dg.Columns.Items.Title.Caption)
else
//其他行打印每行的内容
printer.Canvas.TextOut(x+rowb,y+colb,dg.Fields.AsString);
end;
//下一列的横坐标,下一列的纵坐标不变
x:=x+dg.Columns.Items.Width*ps;
end;

//打印下一记录
if not (y=py*pt) then
dg.DataSource.DataSet.Next;
x:=px*pl;//打印下一行时,横坐标回到行首
y:=y+lh;
//打印满一页时,新建一页
if (y+lh)>(pageheight-py*pr) then
begin
newpage;
x:=px*pl;
y:=py*pt;
end;
end;
EndDoc;
end;
end;
end;
上面的有些变量你可以写个配置窗口配置一下,也可以直接用.

 
用dbgrideh和printdbgrideh,有统计功能,并且可以显示页数.
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=726078
直接打印DBGrids的内容
 
给你一个函数,参数是dbgrid的名称和报表的标题,当然,前提是数据集已经打开。 如果字段要显示中文,那么dbgrid的列要先填上中文名称,否则打印出来的就是数据集的字段名称
procedure TForm1.printGrid(sender:TDBGRID;title:string);
var
aReport : TCustomQuickRep;
SomeFields: TStringList;
MyTable: TDataset;
nIdx,fdcount,totalWidth: integer;
begin
MyTable:=sender.DataSource.DataSet;
if not myTable.active then
exit;
SomeFields := TStringList.Create;
fdcount:=sender.Columns.Count;
totalWidth:=1;
for nIdx:=0 to fdcount-1do
SomeFields.Add(sender.Columns[nIdx].FieldName);
areport:=nil;
QRCreateList(aReport, nil, MyTable, title,SomeFields);
for nIdx := 0 to aReport.Bands.ColumnHeaderBand.ControlCount -1do
if aReport.Bands.ColumnHeaderBand.Controls[nIdx] is TQRPrintable then
with TQRPrintable(aReport.Bands.ColumnHeaderBand.Controls[nIdx])do
begin
(TQRPrintable(aReport.Bands.ColumnHeaderBand.Controls[nIdx]) as TQRLabel).caption:=sender.Columns[nIdx].Title.caption ;
Left :=totalWidth;
totalWidth:=totalWidth+sender.Columns[nIdx].Width+5;
width:=sender.Columns[nIdx].Width;
end;
totalWidth:=1;
for nIdx := 0 to aReport.Bands.DetailBand.ControlCount -1do
if aReport.Bands.DetailBand.Controls[nIdx] is TQRPrintable then
with TQRPrintable(aReport.Bands.DetailBand.Controls[nIdx])do
begin
autosize:=false;
Left :=totalWidth;
totalWidth:=totalWidth+sender.Columns[nIdx].Width+5;
width:=sender.Columns[nIdx].Width;
//if MyTable.FieldByName(SomeFields[nIdx]) is TNumericField then
// (TQRPrintable(aReport.Bands.DetailBand.Controls[nIdx]) as TQRexpr).mask:=(MyTable.FieldByName(SomeFields[nIdx]) as TNumericField).displayformat;
end;
if r_poPortrait.Checked then
areport.page.Orientation:=poPortrait
else
areport.page.Orientation:=poLandscape;
areport.Font.Size:=12;

areport.preview;
aReport.Free;
SomeFields.Free;
end;
 
有一个printdbgrid控件,你上英文yahoo上搜一下
 
后退
顶部