Delphi简单的打印预览功能错误?

时间:2014-10-01 07:32:44

标签: delphi

我正在使用RAD Studio XE6,我有一个简单的火猴形式,用于打印图像。我认为如果我设法创建预览功能以在打印之前显示最终图像,那将是一个好主意。为此,我尝试使用TImage组件,而不是将我的数据发送到打印机画布,而是使用类似下面的代码将其发送到图像画布。

ImageViewer1.Canvas.Font.Size := 15;
ImageViewer1.Canvas.Font.Family   := 'Arial';
ImageViewer1.Canvas.Font.Style  := [TFontStyle.fsbold];
ImageViewer1.Canvas.Fill.Color  := claBlack;
ImageViewer1.Canvas.Fill.Kind := TBrushKind.Solid;

s := 'Test Print';
l := Round((ImageViewer1.Width - ImageViewer1.Canvas.TextWidth(s)) / 99);
t := Round(ImageViewer1.Canvas.TextHeight(s)*3/100);
r := l + Round(ImageViewer1.Canvas.TextWidth(s));
b := t + Round(ImageViewer1.Canvas.TextHeight(s));

ImageViewer1.Canvas.FillText(TRectF.Create(l, t, r, b), s, false, 1,
  [TFillTextFlag.RightToLeft], TTextAlign.Leading, TTextAlign.Leading);

事情是,最终我的TImage组件中没有显示任何内容。我做错了什么?

1 个答案:

答案 0 :(得分:2)

您创建的内容不是打印预览。

打印预览显示方向,边距等。如果您想创建打印预览,您应该这样做:


您可以为发送到打印机的任何内容创建自己的打印预览。 只需用一个TImage组件的Canvas替换Printer.Canvas,它放在一个空的表单上。

换句话说:创建一个新表单,在其上放置一个TImage(将其设置为alClient),然后修改您的打印例程以接受TCanvas作为参数。这样,您就可以对打印机和TImage画布使用相同的例程。