注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鑫淼梦园的博客

圆你的梦想 从这里开始

 
 
 

日志

 
 

【转载】delphi 下如何很好的打印stringgrid  

2014-05-02 15:52:45|  分类: delphi xe5 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
给段直接调用priter打印     加上uses   printers   
procedure TForm1.Button1Click(Sender: TObject);
var
pl,pt:integer;
//pr,pb:integer; //页边距
px,py:integer;//打印机分辨率
ps:integer;//打印机与显示器分辨率之比
lh:integer;//行高
i,j:integer;
x,y:integer;//打印坐标
rowb,colb:integer; //行距、行距
copypage: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(stringgrid1.Font.Name);
//打印的起始位置(打印机画布上的位置)
x:=PX*pl;
y:=PY*pt;
//打印份数也可以通过TPrintDialog控件的的Copies取得
for copypage:=1 to spinedit8.Value do
begin
with printer do
begin
title:='打印报表';
//打印
begindoc;
//输出报表头
canvas.TextOut(printer.PageWidth div 2-
Printer.Canvas.TextWidth('打印StringGrid内容'),0,
'打印StringGrid内容');
for j:=0 to stringgrid1.rowcount-1 do
begin
for i:=0 to stringgrid1.colcount-1 do
begin
if x=px*pl then
Printer.Canvas.Rectangle(x,y,x+printer.Canvas.TextWidth(stringgrid1.cells[1,0])*ps,y+lh)
else
Printer.Canvas.Rectangle(x,y,x+printer.Canvas.TextWidth(stringgrid1.cells[i,0])*ps,y+lh);
if y=PY*pt then
Canvas.TextOut(x+rowb,y+colb,stringgrid1.Cells[i,0])
else
begin
Printer.Canvas.TextOut(x+rowb,y+colb,
stringgrid1.cells[i,j]);
end;
//下一列的横坐标,下一列的纵坐标不变
x:=x+printer.Canvas.TextWidth(stringgrid1.cells[i+1,0])*ps;
end;
x:=px*pl; //打印下一行时,横坐标回到行首
y:=y+lh;
end;
EndDoc;
end;
end;
end;
  评论这张
 
阅读(240)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017