原则上,使用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;