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;

Delphi 打印实例

unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, ...
  • lailai186
  • lailai186
  • 2013年05月16日 14:20
  • 2700

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

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

StringGrid使用教程(Delphi)

StringGrid行列的增加和删除type  TExCell = class(TStringGrid)public  procedure DeleteRow(ARow: Longint);  pro...
  • formiss
  • formiss
  • 2007年05月28日 16:19
  • 11098

Delphi对Excel的所有操作

学完这个你就成为excel高手了!(Delphi对Excel的所有操作)逐个试试!   一) 使用动态创建的方法  首先创建 Excel 对象,使用ComObj:  var Excel...
  • zisongjia
  • zisongjia
  • 2017年03月01日 09:45
  • 232

在StringGrid中每行添加一个选择框(checkbox)

StringGrid得实际使用中,经常会遇到这样的需求,用户想对每一行的记录作一个标记,想对做了标记的记录作特别的操作。例如想删除多条记录。     在网页中经常有类似的应用,例如在电子邮箱里,显示...
  • rznice
  • rznice
  • 2013年11月05日 15:53
  • 4095

DELPHI 打印预览功能

在很多应用程序中,都需要程序具有打印预览功能,以避免用户由于选择不当出现打印错误。           预览实现方式为通过创建一个Tpanel的派生类并公开它的canvas属性比例尺或视区范围,使用...
  • lailai186
  • lailai186
  • 2013年05月16日 13:43
  • 1876

Delphi对Excel的所有操作

学完这个你就成为excel高手了!(Delphi对Excel的所有操作)逐个试试!   一) 使用动态创建的方法  首先创建 Excel 对象,使用ComObj:  var ExcelApp: Va...
  • qingfeng45697
  • qingfeng45697
  • 2016年02月01日 16:16
  • 1487

StringGrid使用教程(Delphi)

StringGrid行列的增加和删除type  TExCell = class(TStringGrid)public  procedure DeleteRow(ARow: Longint);  pro...
  • formiss
  • formiss
  • 2007年05月28日 16:19
  • 11098

Delphi 打印实例

unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, ...
  • lailai186
  • lailai186
  • 2013年05月16日 14:20
  • 2700

轻松实现DBGrid的多表头

轻松实现DBGrid的多表头    hj0791(原作)      关键字     多表头     用法:   设置DBGrid的Column的Caption属性   例如:Col...
  • lyf_lyf
  • lyf_lyf
  • 2015年05月25日 19:21
  • 1468
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:delphi中打印TStringGrid
举报原因:
原因补充:

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