delphi中打印TStringGrid

原创 2004年07月30日 11:52:00

procedure TFrmDTWater.PrintGrid(GenStrGrid: TStringGrid; sTitle: String);
const
  LeftBlank=1; //定义页边距,单位厘米
  RightBlank=1;
  TopBlank=2;
  BottomBlank=2;
var
  PointX,PointY:integer;
  PointScale,PrintStep:integer;
  s1,s2,s3:string;
  x,y:integer;
  i,k:integer;
begin
   //横向打印
  printer.Orientation:=poPortrait;
  if PrintDialog1.Execute then
  begin
     //获取当前打印机的分辨率
     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.Canvas.Font.Name:='宋体';
     printer.canvas.Font.Size:=16;
     printer.canvas.Font.Style:=[fsBold];

     //根据字体的大小确定每行的高度
     s1:=Ttl;
     PrintStep:=printer.canvas.TextHeight(s1)+16;

     //打印的起点位置
     x:=PointX*LeftBlank;
     y:=PointY*TopBlank;

     printer.BeginDoc;
     //打印标题
     x:=x+StringGrid1.DefaultColWidth*PointScale*2;
     Printer.Canvas.TextOut(x+8,y+8,s1);
     y:=y+PrintStep;
      //打印日期
     printer.Canvas.Font.Name:='宋体';
     printer.canvas.Font.Size:=12;
     printer.canvas.Font.Style := [];
     //根据字体的大小确定每行的高度
     s2:=FormatDateTime('yyyy-mm-dd',Date());
     PrintStep:=printer.canvas.TextHeight(s2)+20;
     x:=x+StringGrid1.DefaultColWidth*PointScale*3;
     Printer.Canvas.TextOut(x+8,y+8,s2);
     x:=PointX*LeftBlank;
     y:=y+PrintStep;
      ////打印数据
     k:=0;
     while k<=StringGrid1.RowCount do
     begin
        //打印中的所有列
       for i:=0 to StringGrid1.ColCount-1 do
       begin

         //假如所要打印的列超出了打印范围,则忽略该列
         if (x+StringGrid1.DefaultColWidth *PointScale)<=(Printer.PageWidth-PointX*RightBlank) then
         begin

           //画表格线
           //每页的第一行打印表头
           if k=1 then
               printer.canvas.Font.Style:=[fsBold]
           else
                printer.canvas.Font.Style:=[];
           if k<>0 then
              Printer.Canvas.Rectangle(x,y,x+StringGrid1.DefaultColWidth
                                     *PointScale+200,y+PrintStep);
           if k<>0 then
              Printer.Canvas.TextOut(x+8,y+8,StringGrid1.Cells[i,k]);
         end;

         //计算下一列的横坐标
         x:=x+StringGrid1.DefaultColWidth*PointScale+200;
       end;
       {if not (y=PointY*TopBlank) then
          k:=k+1;}
       x:=PointX*LeftBlank;
       y:=y+PrintStep;
       //换页
       if (y+PrintStep)>(Printer.PageHeight-PointY*BottomBlank) then
       begin
         Printer.NewPage;
         y:=PointY*TopBlank;
       end;
       k:=k+1;
     end;
     //打印结尾字体和大小
     printer.Canvas.Font.Name:='宋体';
     printer.canvas.Font.Size:=15;
     printer.canvas.Font.Style:=[fsBold];
     s2:='标题';
     x:=x+StringGrid1.DefaultColWidth*PointScale*3;
     Printer.Canvas.TextOut(x+8,y+8,s2);
     printer.EndDoc;
     ShowMessage('开始打印...');
     StatusBar1.Panels.Items[0].Text:='正在打印....';
     //Timer1.Enabled:=true;
  end;
end;

NextGrid for Delphi 7

  • 2015年06月14日 10:51
  • 1.24MB
  • 下载

Delphi 打印实例

unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, ...
  • lailai186
  • lailai186
  • 2013-05-16 14:20:54
  • 3009

Delphi文本和图形的打印

 对于每一个Windows应用程序开发者来说,打印功能的实现都是极为棘手的,因为要涉及到相当多的代码,而且常常是相当复杂,但是在Delphi中实现文本和图像的打印功能却是非常容易的。 文本的打印功能 ...
  • walce
  • walce
  • 2005-04-25 20:22:00
  • 2693

Delphi 打印 Tprinter(1)

打印          打印对于许多 Windows 程序员来说是十分棘手的问题。         Delphi 简化了打印时用户所必须了解的大部分内容。用户可以很轻松地写出简单的打印程序来输出...
  • lailai186
  • lailai186
  • 2013-04-08 14:35:32
  • 14080

delphi 实现打印预览和打印过程

  • 2011年10月12日 15:22
  • 26KB
  • 下载

Delphi中如何控制打印方向,纸张大小等

 如何在程序里控制打印纸张大小(A3,A4)和打印方向?不想打开设置窗口       ---------------------------------------------------------...
  • xinzheng_wang
  • xinzheng_wang
  • 2011-04-02 16:37:00
  • 5419

实现自己的print

在嵌入式开发中,常常会通过串口打印一些信息到PC终端,这就需要实现自己的printf函数,下面介绍打印函数print的实现。 print.h #ifndef __PRINT_H_ ...
  • qqliyunpeng
  • qqliyunpeng
  • 2016-02-02 12:12:49
  • 762

delphi Inc函数和Dec函数的用法

inc有两种用法: 一个是inc(integer),就是加1 比如 i := 100; inc(i); 就是i变为101 另一个是inc(integer,integer)就是加n 比如 i:=1...
  • wozengcong
  • wozengcong
  • 2013-12-31 21:21:46
  • 2471

<em>Delphi打印</em>组件SailPrint

<em>Delphi中</em>的第三方<em>打印</em>控件,可以<em>打印</em>dbgrideh和string<em>grid</em>等若有疑问,欢迎交流!QQ:187106433MSN:myleaves2008@hotmai.comE-Mail:xixuan2001@163....
  • 2018年03月23日 00:00

<em>Grid++</em>Report报表构件

<em>Grid+</em>+Report 报表构件适用开发工具广泛:VB.NET、C#.NET、VB、VC、<em>Delphi</em>、CBuilder、PowerBuilder等一切支持 COM 的开发工具。除了提供报表的<em>打印</em>、<em>打印</em>预览、数据...
  • 2018年03月23日 00:00
收藏助手
不良信息举报
您举报文章:delphi中打印TStringGrid
举报原因:
原因补充:

(最多只允许输入30个字)