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

📄 uprintdbgrid.pas

📁 港口货物管理系统
💻 PAS
字号:
unit uprintdbgrid;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,printers, DB, DBTables, Grids, DBGrids, Spin, ExtCtrls;

type
  Tfmprintdbgrid = class(TForm)
    GroupBox1: TGroupBox;
    SpinEdit1: TSpinEdit;
    Label1: TLabel;
    SpinEdit2: TSpinEdit;
    Label2: TLabel;
    SpinEdit3: TSpinEdit;
    Label3: TLabel;
    SpinEdit4: TSpinEdit;
    Label4: TLabel;
    ComboBox1: TComboBox;
    Label5: TLabel;
    ComboBox2: TComboBox;
    Label6: TLabel;
    Label7: TLabel;
    SpinEdit5: TSpinEdit;
    Button2: TButton;
    Label8: TLabel;
    SpinEdit6: TSpinEdit;
    Label9: TLabel;
    SpinEdit7: TSpinEdit;
    Label11: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Panel1: TPanel;
    Label10: TLabel;
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
   text1,text2,text3,text4,text5:string;
   dbgrid2:tdbgrid; { Public declarations }
  end;

var
  fmprintdbgrid: Tfmprintdbgrid;

implementation

uses uqueryall,uqueryallout, udm_user,ulookupagname,uquerygroup,uqueryplan,
  ulogin;

{$R *.dfm}

procedure Tfmprintdbgrid.Button2Click(Sender: TObject);
var
  pl,pr,pt,pb:integer;//页边距
  px,py:integer;//打印机分辨率
  ps:integer;//打印机与显示器分辨率之比
  lh,lw: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(DBGrid2.Font.Name)+10;
  lw:=printer.Canvas.TextWidth(DBGrid2.Font.Name);
  //打印的起始位置(打印机画布上的位置)
  x:=PX*pl;
  y:=PY*pt;
  //打印DBGrid1中的内容
  if (dbgrid2.DataSource.DataSet.Active=true) and (dbgrid2.datasource.DataSet.RecordCount>0) then
    begin
      //设置一打印机任务标题
      printer.Title:=edit1.text;
      with printer do
      begin
        BeginDoc;
        dbgrid2.datasource.DataSet.First;
        while not dbgrid2.datasource.DataSet.Eof do
          begin
            for i:=0 to DBGrid2.FieldCount-1 do
              begin
              //设定打印的宽度
                if (x+DBGrid2.Columns.Items[i].Width*ps)
                   <=(PageWidth-ps*pr)+lw then
                  begin
                    //画出表格线
                    Printer.Canvas.Rectangle(x,y,x+dbgrid2.Columns.Items[i].Width*ps+lw,y+lh);
                    //如果为第一行时,打印DBGrid1确的标题
                    if y=PY*pt then
                      Canvas.TextOut(x+rowb,y+colb,
                      DBGrid2.Columns[i].Title.Caption)
                    else
                    //其它行,打印每行的内容
                      Printer.Canvas.TextOut(x+rowb,y+colb,
                      DBGrid2.Fields[i].asString);
                  end;
                   //下一列的横坐标,下一列的纵坐标不变
                 x:=x+dbgrid2.Columns.Items[i].Width*ps+lw;
                end;
                //打印下一记录
                if not (y=py*pt) then
                 dbgrid2.datasource.DataSet.next;
                  x:=px*pl; //打印下一行时,横坐标回到行首
                  y:=y+lh;
               //打印满一页时,新建一页
               if (y+lh)>(PageHeight-py*pb) then
                 begin
                   NewPage;
                   x:=px*pl;
                   y:=py*pt;
                 end;
              end;
        x:=px*pl; //打印下一行时,横坐标回到行首
        y:=y+lh;
        Printer.Canvas.TextOut(x+rowb,y,fmprintdbgrid.text1);
        Printer.Canvas.TextOut(x+2*rowb,y+colb,fmprintdbgrid.text2);
        Printer.Canvas.TextOut(x+3*rowb,y+colb,fmprintdbgrid.text3);
        Printer.Canvas.TextOut(x+4*rowb,y+colb,fmprintdbgrid.text4);
        Printer.Canvas.TextOut(x+5*rowb,y+colb,fmprintdbgrid.text5);
        EndDoc;
      end;
      dbgrid2.datasource.DataSet.First;//回到DBGrid1首行
      Application.MessageBox('已打印完成','打印',32);
      end;
end;

procedure Tfmprintdbgrid.FormActivate(Sender: TObject);
var i:integer;
begin
edit1.Text:='';
edit1.SetFocus;
text1:='';
text2:='';
text3:='';
text4:='';
text5:='';
//获得打印可选字体,并设置初始字体为DBGrid1的字体,字号
case fmuser.fmid of
1:
begin
dbgrid2:=fmqueryall.DBGrid1;
text1:='合计:  '+fmqueryall.StatusBar1.Panels[1].Text+' ';
text2:=text2+fmqueryall.StatusBar2.Panels[2].Text+':'+fmqueryall.StatusBar1.Panels[2].Text+'   ';
text2:=text2+fmqueryall.StatusBar2.Panels[3].Text+':'+fmqueryall.StatusBar1.Panels[3].Text+'   ';
text2:=text2+fmqueryall.StatusBar2.Panels[4].Text+':'+fmqueryall.StatusBar1.Panels[4].Text+'   ';

text3:=text2+fmqueryall.StatusBar2.Panels[5].Text+':'+fmqueryall.StatusBar1.Panels[5].Text+'   ';
text3:=text3+fmqueryall.StatusBar2.Panels[6].Text+':'+fmqueryall.StatusBar1.Panels[6].Text+'   ';
text3:=text3+fmqueryall.StatusBar2.Panels[7].Text+':'+fmqueryall.StatusBar1.Panels[7].Text+'   ';

text4:=text4+fmqueryall.StatusBar2.Panels[8].Text+':'+fmqueryall.StatusBar1.Panels[8].Text+'   ';
text4:=text4+fmqueryall.StatusBar2.Panels[9].Text+':'+fmqueryall.StatusBar1.Panels[9].Text+'   ';
text4:=text4+fmqueryall.StatusBar2.Panels[10].Text+':'+fmqueryall.StatusBar1.Panels[10].Text+'   ';
text5:=text5+fmqueryall.StatusBar2.Panels[11].Text+':'+fmqueryall.StatusBar1.Panels[11].Text;
end;

2:
begin
dbgrid2:=fmqueryallout.DBGrid1;
text1:='合计:  '+fmqueryallout.StatusBar1.Panels[1].Text+' ';
text2:=text2+fmqueryallout.StatusBar1.Panels[2].Text+'  ';
text3:=text3+fmqueryallout.StatusBar1.Panels[3].Text+'  ';
text4:=text4+fmqueryallout.StatusBar1.Panels[4].Text+'  ';
end;
3:
begin
dbgrid2:=fmquerygname.DBGrid1;
text1:='合计:  '+fmquerygname.StatusBar1.Panels[1].Text+'   '+fmquerygname.StatusBar1.Panels[2].Text;
end;
4:
begin
dbgrid2:=fmquerygroup.DBGrid1;
text1:='合计:  '+fmquerygroup.StatusBar1.Panels[1].Text+' ';
text2:=text2+fmquerygroup.StatusBar1.Panels[2].Text+'   ';
text3:=text3+fmquerygroup.StatusBar1.Panels[3].Text;
text4:=text4+fmquerygroup.StatusBar1.Panels[4].Text;
end;
5:
begin
dbgrid2:=fmqueryplan.DBGrid1;
text1:='合计:  '+fmqueryplan.StatusBar1.Panels[1].Text+'   '+fmqueryplan.StatusBar1.Panels[2].Text+'  ';
end;
end;

combobox2.Items:=printer.Fonts;
combobox2.Text:=dbgrid2.Font.Name;
spinedit5.value:=dbgrid2.Font.Size;
dbgrid2.DataSource.DataSet.Open;
end;

procedure Tfmprintdbgrid.FormCreate(Sender: TObject);
begin
application.OnMessage:=fmlogin.doenterastab;
end;

procedure Tfmprintdbgrid.Button1Click(Sender: TObject);
begin
fmprintdbgrid.Close;
end;

end.

⌨️ 快捷键说明

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