Canvas Lazarus:TForm1打印的是“a”的大小;缩略图像";-不是TForm1的大小

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

删除了问题的原始描述-

打印机输出到纸张的大小为缩略图大小”“-问题已解决

问题原因:

“打印机的分辨率比屏幕的分辨率高,例如,96ppi与600ppi的分辨率相比,图像大小约为1/6”-StackOverFlow上的post

原始代码:

    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 **网络上的“弗兰肯斯坦”代码