怎样把DBGrid当前显示的记录打印出来!?
用printdialog!不行的话用rave
谢谢!!!
推荐阅读
使用相同的数据集和报表控件相关联就可以了!
或者使用fastreport的frprintgrid控件直接打印!
procedure tform1.button2click(sender: tobject);
var
pl,pr,pt,pb:integer;//页边距
px,py:integer;//打印机分辨率
ps:integer;//打印机与显示器分辨率之比
lh:integer;//行高
i:integer;
x,y:integer;//打印坐标
rowb,colb:integer; //行距、行距
begin
//初始化页面
pl:=spinedit1.value;
pr:=spinedit2.value;
pt:=spinedit3.value;
pb:=spinedit4.value;
rowb:=spinedit6.value;//行距
colb:=spinedit7.value;//列距
//将获得的打印机分辨率由厘米转换为英寸
px:=trunc(getdevicecaps(printer.handle,logpixelsx)/2.54);
py:=trunc(getdevicecaps(printer.handle,logpixelsy)/2.54);
//将屏幕分辨率转换为打印机的比例
ps:=trunc(getdevicecaps(printer.handle,logpixelsx)
/screen.pixelsperinch);
//设置打印方向
if combobox1.text=横向打印 then
printer.orientation:=poportrait;
else
printer.orientation:=polandscape;
//获得打印的字体和大小
printer.canvas.font.name:=combobox2.text;
printer.canvas.font.size:=spinedit5.value;
printer.canvas.font.color:=clred;
printer.canvas.pen.color:=clblue;
//设置行高
lh:=printer.canvas.textheight(dbgrid1.font.name);
//打印的起始位置(打印机画布上的位置)
x:=px*pl;
y:=py*pt;
//打印dbgrid1中的内容
if (table1.active=true) and (table1.recordcount>0) then
begin
//设置一打印机任务标题
printer.title:=dbgrid内容打印;
with printer do
begin
begindoc;
table1.first;
while not table1.eof do
begin
for i:=0 to dbgrid1.fieldcount-1 do
begin
//设定打印的宽度
if (x+dbgrid1.columns.items[i].width*ps)
<=(pagewidth-ps*pr) then
begin
//画出表格线
printer.canvas.rectangle(x,y,x+dbgrid1.columns.items[i].width*ps,y+lh);
//如果为第一行时,打印dbgrid1确的标题
if y=py*pt then
canvas.textout(x+rowb,y+colb,
dbgrid1.columns[i].title.caption)
else
//其它行,打印每行的内容
printer.canvas.textout(x+rowb,y+colb,
dbgrid1.fields[i].asstring);
end;
//下一列的横坐标,下一列的纵坐标不变
x:=x+dbgrid1.columns.items[i].width*ps;
end;
//打印下一记录
if not (y=py*pt) then
table1.next;
x:=px*pl; //打印下一行时,横坐标回到行首
y:=y+lh;
//打印满一页时,新建一页
if (y+lh)>(pageheight-py*pb) then
begin
newpage;
x:=px*pl;
y:=py*pt;
end;
end;
enddoc;
end;
table1.first;//回到dbgrid1首行
application.messagebox(已打印完成,打印,32);
end;
end;
procedure tform1.formactivate(sender: tobject);
begin
//获得打印可选字体,并设置初始字体为dbgrid1的字体,字号
combobox2.items:=printer.fonts;
combobox2.text:=dbgrid1.font.name;
spinedit5.value:=dbgrid1.font.size;
table1.databasename:=extractfilepath(application.exename);
table1.open;
end;
end.


讨论区