以下是我打印的一段代码,打印出来是空白的,麻烦大家看一下是什么问题
var
  bmp : TBitmap;
  ScaleX, ScaleY: Integer;
  R: TRect;
begin
  bmp := TBitmap.Create;
  bmp.Width := Panel2.Width;
  bmp.Height := Panel2.Height;
  with Printer do
  begin
    try
      BeginDoc;
      Panel2.PaintTo(bmp.Canvas, 0, 0);
      ScaleX := GetDeviceCaps(hdc(Handle),logPixelsX) div PixelsPerInch;
      ScaleY := GetDeviceCaps(hdc(Handle),logPixelsY) div PixelsPerInch;
      R := Rect(0, 0, bmp.Width * ScaleX, bmp.Height * ScaleY);
      Canvas.StretchDraw(R, bmp);
      
    finally
      EndDoc;
      bmp.Free;
    end;
  end;
end;
有没更好的打印方法。我的panel上放有image,edit,checkbox。

解决方案 »

  1.   

    你根本没对Printer 进行输出操作啊,你只是操作了bmp,你需要把bmp放到Printer 的canvas上
      

  2.   

    Canvas.StretchDraw(R, bmp);
    这段代码是不吗
      

  3.   

    var
      bmp : TBitmap;
      ScaleX, ScaleY: Integer;
      R: TRect;
    begin
      bmp := TBitmap.Create;
      bmp.Width := Panel2.Width;
      bmp.Height := Panel2.Height;
      with Printer do
      begin
        try
          BeginDoc;
          Panel2.PaintTo(bmp.Canvas, 0, 0);
          bmp.SaveToFile('c:\aa.bmp');
          ScaleX := GetDeviceCaps(Handle,logPixelsX) div PixelsPerInch;
          ScaleY := GetDeviceCaps(Handle,logPixelsY) div PixelsPerInch;
          bmp.LoadFromFile('c:\aa.bmp');
          R := Rect(0, 0, bmp.Width*ScaleX, bmp.Height*ScaleY);
          Printer.Canvas.StretchDraw(R, bmp);
        finally
          EndDoc;
          bmp.Free;
          DeleteFile('c:\aa.bmp');
        end;
      end;
    end;
    这样子就能打印出来了。不知有没更好的办法不用保存aa.bmp来实现的
      

  4.   


    var dc : hdc;
    begin
      dc := getdc(panel1.handle);
      stretchblt(Printer.Canvas.handle,0,0,panel1.width,panel1.height,dc,0,0,panel1.width,panel1.height,
                 srccopy);
      releasedc(panel1.handle,dc);
    end;你自己调整一下里面的宽高值