各位大哥,小妹请教:怎样才能将Dbgrid中的内容完整的打印出来,多谢。

解决方案 »

  1.   

    Dbgrid中的内容完整的打印出来: 不過排版就不行了
    unit DbGridprint;
    //直接打印DBGrid中的數據
    interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, Db, Grids, DBGrids, ADODB,Printers,
        ActnList, ComCtrls, ToolWin, ImgList, StdActns,Menus,
        Buttons, DBCtrls, DbTables, Registry ;
    type
      TPrintDBGrid = class(TForm)
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        DataSource1: TDataSource;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        DBGrid1: TDBGrid;
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    var
      PrintDBGrid: TPrintDBGrid;
    implementation{$R *.DFM}procedure TPrintDBGrid.BitBtn1Click(Sender: TObject);
    const
       LeftBlank=1;
       RightBlank=1;
       TopBlank=1;
       BottomBlank=1;
    var
       PointX,PointY:integer;
       PointScale,PrintStep:integer;
       S:String;
       x,y:integer;
       i:integer;
    begin
      if not ADOQuery1.Active then ADOQuery1.Open;
      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:='ABC';
      PrintStep:=printer.canvas.TextHeight(s)+16;
      x:=PointX*LeftBlank;
      y:=PointY*TopBlank;
      if (((DataSource1.DataSet).Active=True) and ((DataSource1.DataSet).RecordCount>0)) then
      begin
        Printer.BeginDoc;
        (DataSource1.DataSet).First;
        while not (DataSource1.DataSet).Eof do
        begin
           for i:=0 to DBGrid1.FieldCount-1 do
           begin
              if (x+DBGrid1.Columns.Items[i].Width*PointScale)<=(Printer.PageWidth-PointX*RightBlank) then
              begin
                 Printer.Canvas.Rectangle(x,y,x+DBGrid1.Columns.Items[i].Width*PointScale,y+PrintStep);
                 if y=PointY*TopBlank then
                  Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Columns[i].Title.Caption)
                else Printer.Canvas.TextOut(x+8,y+8,DBGrid1.Fields[i].asString);
              end;
            x:=x+DBGrid1.Columns.Items[i].Width*PointScale;
           end;
           if not (y=PointY*TopBlank) then (DataSource1.DataSet).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;
        (DataSource1.DataSet).First;
        Application.MessageBox('打印完成','打印',32);
      end;
    end;procedure TPrintDBGrid.BitBtn2Click(Sender: TObject);
    begin
      close;
    end;end.
      

  2.   

    ReprotMachine,too easy!>>mmkill (蒙松雨kill),差点以为是MM杀手!
      

  3.   

    用delphi的quickreport就可以,许多书上都有