如何调整panel的打印比例 ( 积分: 100 )

  • 主题发起人 主题发起人 chenyihai
  • 开始时间 开始时间
C

chenyihai

Unregistered / Unconfirmed
GUEST, unregistred user!
我用:panel1.paintto(printer.canvas.handle.0,0),打印panel中的内容,但是打出来的比例很小,如何调整?
 
我用:panel1.paintto(printer.canvas.handle.0,0),打印panel中的内容,但是打出来的比例很小,如何调整?
 
暂时没有什么好的办法,打印出来可能效果是比较粗糙的,Panel1没有canvas属性,所以通常会采用PaintTo的方法,它是一个重载函数,如果要打印出来,一般是用另外那个函数,也就是第一个参数是Canvas的那个,但是其实Printer.Canvas的尺寸和Panel1的差别是很大的,所以只有通过StretchDraw的方式拉伸,所以需要一个中间的临时的东西,比如建立一个Bmp,大概思路是这样,可能自己还需要在上面画点什么,写什么,自己处理
procedure TForm1.Button1Click(Sender: TObject);
var
bmp : TBitmap;
ScaleX, ScaleY: Integer;
R: TRect;
begin
Printer.begin
Doc;
// **
bmp := TBitmap.Create;
bmp.Width := Panel1.Width;
bmp.Height := Panel1.Height;
with Printerdo
begin
try
Panel1.PaintTo(bmp.Canvas, 0, 0);
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(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;
 
后退
顶部