想不用设计报表而直接打印DBGrid中的内容,而又不想借用第三方插件,在delphi能不能直接编程实现??

解决方案 »

  1.   

    当然可以。在DELPHI 中 提 供 了 一 个PRINTERS 程 序 单 元,  它 说 明 了 一 个TPRINTER 对 象, 封 装 了WINDOWS 打 印 工 作 和 输 出 打 印 机 之 间 的 接 口, 并 提  供 常 用 的 属 性 和 方 法, 其 中 画 布CANVAS 是 一 个 非 常 有 用 的 属 性, 它 代 表 了 当 前 打 印 文  件 的 表 面, 是 以 图 形 方 式 来 工 作 的, 整 个 的 打 印 输 出 工 作 仅 仅 是 将 你 打 印 的 内 容 输 出  到TPRINTER 的 属 性CANVAS 上, 当 全 部 的 输 出 工 作 完 成 以 后, 打 印 对 象(TPRINTER) 把 CANVAS 的 属 性 值 送 到 打 印 机 上 去。
    你可以将DBGrid的Canvas复制到Printer的Canvas上来打印:
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
    if printdialog1.execute then 
    begin
    printer.begindoc;
    printer.canvas.draw(0,0,DBGrid1.Canvas);
    printer.enddoc;
    end;
    end;
      

  2.   

    DBGRID的DATaSOURCE是QUERY或者TABLE,直接用QR就行
      

  3.   

    DBGRID的DATaSOURCE是QUERY或者TABLE,直接用QR就行
      

  4.   

    如果调用一 个PRINTERS 程 序 单 元,如何设置打印机的属性及其打印的属性
      

  5.   

    控件栏目的Dialog栏目里不是有PrinterSetupDialog吗?用那个就可以了
      

  6.   

    在调用PrinterSetupDialog之前如何判断是否安装了打印机?
      

  7.   

    不行啊,运行出错:Incompatible types: 'TGraphic' and 'TCanvas'
      

  8.   

    按我那个写法,不大可能出错吧?不过我现在没装delphi,不能调试。
    至于判断安装打印机,没做过,一般也没这个需要,没装就让它出错好了。真的要判断的话,从网上搜索一下吧,应该有答案。
      

  9.   

    procedure  TForm1.PreParePrint;
    var  LeftValue,LeftValue2:integer;
         aLabel:TQRLabel;
         aText:TQRDbText;
         i:integer;
    begin
        LeftValue:=0;
        LeftValue2:=0;
        with Form2  do
          begin
            QuickRep1.DataSet:=form1.ADOQuery1;
            aLabel:=TQRLabel.create(Form2);
            aLabel.parent:=TitleBand1;
            aLabel.width:=400;
            aLabel.Height:=TitleBand1.Height;
            aLabel.Alignment:=taCenter;
            aLabel.Caption:='xx报表';//报表标题。
            for i:=0  to  form1.DBGrid1.Columns.Count-1 do
                begin
                    //字段标题
                    aLabel:=TQRLabel.create(Form2);
                    aLabel.parent:=ColumnHeaderBand1;
                    aLabel.AutoSize:=False;
                    aLabel.AutoStretch:=True;
                    aLabel.Width:=form1.DBGrid1.Columns[i].Width;
                    aLabel.Left:=LeftValue;
                    aLabel.Top:=10;
                    aLabel.Height:=ColumnHeaderBand1.Height;
                    aLabel.Alignment:=taLeftJustify;
                    aLabel.Caption:=form1.DBGrid1.Columns[i].DisplayName;;//字段标题名。
                    LeftValue:=LeftValue+form1.DBGrid1.Columns[i].Width;
                   //记录内容
                    aText:=TQRDbtext.Create(Form2);
                    aText.Parent:=form2.DetailBand1;
                    aText.DataSet:=QuickRep1.DataSet;
                    aText.AutoStretch:=True;
                    aText.Left:=LeftValue2;
                    aText.height:=form2.DetailBand1.Height;
                    aText.Top:=10;
                    aText.Width:=form1.DBGrid1.Columns[i].Width;
                    aText.Alignment:=taLeftJustify;
                    aText.DataField:=form3.DBGrid1.Columns[i].FieldName;
                    LeftValue2:=LeftValue2+form1.DBGrid1.Columns[i].Width;
                 end;
         end;
    end;
      

  10.   

    printer.canvas.draw最后应为(黄条提示):TGraphic
      

  11.   

    getdevicecap检测打印机的状态
    在QR的preview中也有打印机的设置