各位学长,怎样打印DBGrid中的内容呢?(20分)

  • 主题发起人 主题发起人 纸老虎
  • 开始时间 开始时间

纸老虎

Unregistered / Unconfirmed
GUEST, unregistred user!
我刚学Delphi,查看help的print打头的关键词,只是讲怎样打印图、怎样设置打印机,
但究竟怎样打印DBGrid中显示的数据库内容呢?
 
可以把数据送到EXCEL打印或报表控件打印啊。
 
试试Report Machine(http://rmachine.yeah.net),包你满意。
 
用FAST REPORT吧,功能强大
 
不行,各位的方法太复杂了!
 
使用Delphi自带的QuickReport,将DBGrid相关联的DataSet和QuickReport相关联,然后放置
QrDBText等,设置属性,就可以打印了。
不过,这其实不是打印DBGrid,而是打印Query或者Table,但是对于入门级别,是可以学习一些的。
如果非要打印DBGrid,也是可以的,一会给你贴两端例程,希望不算灌水,因为我贴过好几次了。[:)]
 
uses
DBGrids, QuickRpt, DB, Qrctrls,qrprntr,printers;

procedure PrintDBGrid(DBGrid: TDBGrid;
pTitle: string);
const
VER_MSG = '显示信息';
VG_UnitName='公司名称';
var
aReport: TQuickRep;
i, aLeft: integer;
PageHeaderBand1: TQRBand;
ColumnHeaderBand1: TQRBand;
DetailBand1: TQRBand;
PageFooterBand1: TQRBand;
oldBmk: TBookMark;
begin

if not DBGrid.DataSource.DataSet.Active then

begin

ShowMessage('数据集没有打开!');
Exit;
end;


oldBmk := DBGrid.DataSource.DataSet.GetBookmark;
DBGrid.DataSource.DataSet.First;
aReport := TQuickRep.Create(nil);
PageHeaderBand1 := aReport.CreateBand(rbPageHeader);
ColumnHeaderBand1 := aReport.CreateBand(rbColumnHeader);
DetailBand1 := aReport.CreateBand(rbDetail);
PageFooterBand1 := aReport.CreateBand(rbPageFooter);
aReport.DataSet := DBGrid.DataSource.DataSet;
aReport.Font := DBGrid.Font;
DetailBand1.Height := 27;

with TQRLabel(PageHeaderBand1.AddPrintable(TQRLabel))do

begin

Caption := pTitle;
Top := 10;
Left := 0;
Font.Style := [fsBold];
Font.Size := 14;
Width := 0;
end;


aLeft := 0;
for i := 0 to DBGrid.FieldCount - 1do

aLeft := aLeft + DBGrid.Columns.Width + 10;

if aLeft > 728 then

aReport.Page.Orientation := poLandscape
else

aReport.Page.Orientation := poPortrait;
with TQRShape(PageHeaderBand1.AddPrintable(TQRShape))do

begin

Top := 37;
Left := 0;
Height := 2;
pen.Width := 2;
Width := PageHeaderBand1.Width;
end;

with TQRShape(PageFooterBand1.AddPrintable(TQRShape))do

begin

Top := 2;
Left := 0;
Height := 1;
pen.Width := 1;
Width := PageFooterBand1.Width;
end;

with TQRLabel(PageHeaderBand1.AddPrintable(TQRLabel))do

begin

Font.Size := 8;
Caption := VG_UnitName;
Top := PageHeaderBand1.height - Height - 5;
Left := PageHeaderBand1.Width - length(VER_MSG) * Font.Size - 5;
end;

with TQRSysData(PageFooterBand1.AddPrintable(TQRSysData))do

begin

Data := qrsDateTime;
Top := 10;
Left := 0;
end;

with TQRLabel(PageFooterBand1.AddPrintable(TQRLabel))do

begin

Caption := '第';
Top := 10;
Left := PageFooterBand1.Width - 380;
end;

with TQRSysData(PageFooterBand1.AddPrintable(TQRSysData))do

begin

Data := qrsPageNumber;
Top := 10;
Left := PageFooterBand1.Width - 360;
end;

with TQRLabel(PageFooterBand1.AddPrintable(TQRLabel))do

begin

Caption := '页';
Top := 10;
Left := PageFooterBand1.Width - 300;
end;

with TQRLabel(PageFooterBand1.AddPrintable(TQRLabel))do

begin

Caption := '记录总数:';
Top := 10;
Left := PageFooterBand1.Width - 180;
end;

with TQRSysData(PageFooterBand1.AddPrintable(TQRSysData))do

begin

Data := qrsDetailCount;
Top := 10;
Left := PageFooterBand1.Width - 100;
end;


aLeft := 0;
for i := 0 to DBGrid.FieldCount - 1do

begin

if DBGrid.Columns.Visible = false then

continue;
if aLeft + DBGrid.Columns.Width > PageHeaderBand1.Width then

Break;
with TQRShape(ColumnHeaderBand1.AddPrintable(TQRShape))do

begin

Height := 1;
Top := ColumnHeaderBand1.Height - 5;
Left := aLeft;
Width := DBGrid.Columns.Width;
end;


with TQRLabel(ColumnHeaderBand1.AddPrintable(TQRLabel))do

begin

AutoSize := false;
Width := DBGrid.Columns.Width;
Caption := DBGrid.Columns.Title.Caption;
Alignment := taCenter;
Top := 10;
Left := aLeft;
end;


with TQRDBText(DetailBand1.AddPrintable(TQRDBText))do

begin

DataSet := DBGrid.DataSource.DataSet;
DataField := DBGrid.Columns.FieldName;
Alignment := DBGrid.Columns.Alignment;
Top := 5;
Left := aLeft;
AutoSize := False;
Width := DBGrid.Columns.Width;
end;


aLeft := aLeft + DBGrid.Columns.Width + 10;
end;


aReport.Preview;

ColumnHeaderBand1.Free;
DetailBand1.Free;
PageFooterBand1.Free;
PageHeaderBand1.Free;

aReport.Free;

DBGrid.DataSource.DataSet.GotoBookmark(oldBmk);
DBGrid.DataSource.DataSet.FreeBookmark(oldBmk);
end;
 
用ExLib中的DBGridEh,显示在Grid上的数据可以直接打印
 
谢谢各位!很受启发!
 
后退
顶部