⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 singleprintunit.pas

📁 学籍管理
💻 PAS
字号:
{**********************************************************************}
{                    =====================                             }
{                       共用系统线程打印                               }
{                   =====================                              }
{                                    《学籍管理系统》--作者:贺广兵    }
{                                                                      }
{                                                                      }
{                                                                      }
{**********************************************************************}
unit SinglePrintUnit;

interface
uses
    Classes,Windows,WinTypes,Forms,Printers;

procedure SinglePrintDBGridData;

implementation
uses
  DataMoudle,MainForm;

procedure SinglePrintDBGridData;
const
  LeftBlank=1; //定义页边距,单位厘米
  RightBlank=1;
  TopBlank=1;
  BottomBlank=1;
var
  PointX,PointY:integer;
  PointScale,PrintStep:integer;
  s:string;
  x,y:integer;
  i:integer;

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.Orientation:=poLandscape;

  //打印的字体和大小

  printer.Canvas.Font.Name:='宋体';
  printer.canvas.Font.Size:=10;

  //根据字体的大小确定每行的高度

  s:='淮海工学院学生信息表';
  PrintStep:=printer.canvas.TextHeight(s)+16;

  //打印的起点位置

  x:=PointX*LeftBlank;
  y:=PointY*TopBlank;

  //DataSource1是DBGrid1所连接的数据源

  if (DataModule1.ClientDataSet1.Active=true) and
       (DataModule1.ClientDataSet1.RecordCount>0) then
  begin
   printer.BeginDoc;
   DataModule1.ClientDataSet1.First;
   while not DataModule1.ClientDataSet1.Eof do
   begin //打印DBGrid中的所有列
     for i:=0 to ClientMainForm.DBGrid1.FieldCount-1 do
     begin

     //假如所要打印的列超出了打印范围,则忽略该列

     if (x+ClientMainForm.DBGrid1.Columns.Items[i].Width*PointScale)<=(Printer.PageWidth-PointX*RightBlank) then
     begin //画表格线

     //每页的第一行打印表头

     Printer.Canvas.Rectangle(x,y,x+ClientMainForm.DBGrid1.Columns.Items[i].Width*PointScale,y+PrintStep);
     if y=PointY*TopBlank then
       Printer.Canvas.TextOut(x+8,y+8,ClientMainForm.DBGrid1.Columns[i].Title.Caption)

     else
       Printer.Canvas.TextOut(x+8,y+8,ClientMainForm.DBGrid1.Fields[i].asString);

     end; //计算下一列的横坐标
     x:=x+ClientMainForm.DBGrid1.Columns.Items[i].Width*PointScale;
  end;
  if not (y=PointY*TopBlank) then
   DataModule1.ClientDataSet1.next;
  x:=PointX*LeftBlank;
  y:=y+PrintStep; //换页
  if (y+PrintStep)>(Printer.PageHeight-PointY*BottomBlank) then
  begin
    Printer.NewPage;
    y:=PointY*TopBlank;
  end;
 end;
 printer.EndDoc;
  DataModule1.ClientDataSet1.First;
  Application.MessageBox('打印完成!!','信息',32);
 end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -