Image 如何通过点击按钮在一张纸上打印

Image 如何通过点击按钮在一张纸上打印,image,delphi,printing,delphi-7,Image,Delphi,Printing,Delphi 7,我正在寻找一种使用按钮OnClick事件打印页面的解决方案 让我举个例子: 通过按钮OnClick事件,代码将随机地将某些图像放置在彼此相邻的位置。每次点击,我都希望这些图片要么相同,要么不同的按钮打印在一张纸上 我尝试在工具栏中搜索与Delphi和打印机的任何连接,但没有成功。原则上,使用Delphi打印非常容易。基本上,您可以在页面的画布上进行绘制,就像使用VCL(即使用Windows GDI)在屏幕画布上进行绘制一样 下面是一个非常简单的例子: procedure PrintRects;

我正在寻找一种使用按钮OnClick事件打印页面的解决方案

让我举个例子:

通过按钮OnClick事件,代码将随机地将某些图像放置在彼此相邻的位置。每次点击,我都希望这些图片要么相同,要么不同的按钮打印在一张纸上


我尝试在工具栏中搜索与Delphi和打印机的任何连接,但没有成功。

原则上,使用Delphi打印非常容易。基本上,您可以在页面的画布上进行绘制,就像使用VCL(即使用Windows GDI)在屏幕画布上进行绘制一样

下面是一个非常简单的例子:

procedure PrintRects;
const
  Offset = 100;
  RectCountY = 8;
  RectCountX = 4;
var
  S: string;
  TitleRect: TRect;
  MainRect: TRect;
  j: Integer;
  i: Integer;
  RectWidth,
  RectHeight: Integer;
  R: TRect;

  function GetRectRect(X, Y: Integer): TRect;
  begin
    Result := Rect(
      MainRect.Left + X * RectWidth,
      MainRect.Top + Y * RectHeight,
      MainRect.Left + (X + 1) * RectWidth,
      MainRect.Top + (Y + 1) * RectHeight
    );
  end;

begin

  with TPrintDialog.Create(nil) do
    try
      if not Execute then
        Exit;
    finally
      Free;
    end;


  Printer.BeginDoc;
  try

    Printer.Canvas.Font.Size := 42;
    S := 'My Collection of Rects';

    TitleRect := Rect(
      Offset,
      Offset,
      Printer.PageWidth - Offset,
      Offset + 2 * Printer.Canvas.TextHeight(S)
    );

    MainRect := Rect(
      Offset,
      TitleRect.Bottom + Offset,
      Printer.PageWidth - Offset,
      Printer.PageHeight - Offset
    );

    RectWidth := MainRect.Width div RectCountX;
    RectHeight := MainRect.Height div RectCountY;

    Printer.Canvas.TextRect(TitleRect, S, [tfSingleLine, tfCenter, tfVerticalCenter]);

    for j := 0 to RectCountY - 1 do
      for i := 0 to RectCountX - 1 do
      begin
        R := GetRectRect(i, j);
        Printer.Canvas.Brush.Color := RGB(Random(255), Random(255), Random(255));
        Printer.Canvas.FillRect(R);
      end;

  finally
    Printer.EndDoc;
  end;

end;
这将生成以下页面:

不用说,您可以在此网格中打印图像,而不是使用纯色矩形

因此,如果您知道如何使用TCanvas(即Windows GDI)在表单上绘制内容,则可以使用相同的方法在打印页面上绘制

当然,您可以在单击按钮时调用此过程:

procedure TForm1.Button1Click(Sender: TObject);
begin
  PrintRects;
end;

最好使用报告库,如QuickReports。@kometa123:如果你想知道为什么你的问题被否决,我想我可以给你一些见解。询问如何使用Delphi打印页面?这可能是个好问题。答案可能会引导您了解印刷的基础知识。当你点击一个按钮时,该代码可以运行1;当你选择一个菜单项时,该代码可以运行2;当你在每个星期天早上03:00时,该代码可以运行3;当你在组合框中更改该项时,该代码可以运行4;当鼠标离开一个进度条时,该代码可以运行5;等等。正如你所看到的,按钮OnClick部分与打印部分无关。然而,你的Q似乎表明这些部分是不可分割的。