Canvas Lazarus:TForm1打印的是“a”的大小;缩略图像";-不是TForm1的大小
删除了问题的原始描述- “打印机输出到纸张的大小为缩略图大小”“-问题已解决 问题原因: “打印机的分辨率比屏幕的分辨率高,例如,96ppi与600ppi的分辨率相比,图像大小约为1/6”-StackOverFlow上的post 原始代码:Canvas Lazarus:TForm1打印的是“a”的大小;缩略图像";-不是TForm1的大小,canvas,printing,thumbnails,lazarus,Canvas,Printing,Thumbnails,Lazarus,删除了问题的原始描述- “打印机输出到纸张的大小为缩略图大小”“-问题已解决 问题原因: “打印机的分辨率比屏幕的分辨率高,例如,96ppi与600ppi的分辨率相比,图像大小约为1/6”-StackOverFlow上的post 原始代码: procedure TForm1.PrintClick(Sender: TObject); begin if PrintDialog1.Execute then begin with Printer do
procedure TForm1.PrintClick(Sender: TObject);
begin
if PrintDialog1.Execute then
begin
with Printer do
begin
BeginDoc;
Panel1.PaintTo(Canvas, 0,0); //prints contents of Panel1 only
Form1.PaintTo(Canvas, 0, 600); //screenshot/cast of Window
EndDoc;
end;
end;
end;
已解决代码: 需要将内容复制到剪贴板并从剪贴板打印:
procedure TForm1.Button6Click(Sender: TObject);
var
MyRect: TRect;
scale: Double;
R: TRect;
Bitmap: TBitmap;
begin
if PrintDialog1.Execute then
begin
Bitmap := TBitmap.Create;
try
//copy content of Panel1 to Clipboard:
R := Rect(0, 0, Panel1.Width, Panel1.Height);
Bitmap.SetSize(Panel1.Width, Panel1.Height);
Bitmap.Canvas.CopyRect(R, Panel1.Canvas, R);
//print content of Clipboard:
Printer.BeginDoc;
{scale := Printer.PageWidth / Bitmap.Width; //large print
scale := (Printer.PageWidth / (Bitmap.Width / 2)); //twice the size of large print
scale := ((Printer.PageWidth/2) / Bitmap.Width); //reduce size}
scale := Printer.PageWidth / Bitmap.Width; //print full page
ShowMessage(FloatToStr(scale)); // '30', '17.5', '8.75'
{ horizontal pixels, vertical pixels, bit depth 600 x 600 x 24}
MyRect.Left := 0;
MyRect.Top := 0;
MyRect.Right := trunc(Bitmap.Width * scale);
MyRect.Bottom := trunc(Bitmap.Height * scale);
Printer.Canvas.StretchDraw(MyRect, Bitmap);
Printer.EndDoc;
finally
bitmap.free;
end;
end;
end;
已解决:
需要将内容复制到剪贴板并从那里打印-代码现在放大并或多或少打印我想要的大小:D
**网络上的“弗兰肯斯坦”代码已解决:
需要将内容复制到剪贴板并从那里打印-代码现在放大并或多或少打印我想要的大小:D
**网络上的“弗兰肯斯坦”代码