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

Delphi简单打印预览功能错误?,delphi,Delphi,我使用RAD Studio XE6,我有一个简单的fire monkey表单,用于打印图像。我想如果我能在打印前创建一个预览功能来显示最终图像,那将是一个好主意。为此,我尝试使用TImage组件,而不是将数据发送到打印机画布,而是使用下面的代码将数据发送到图像画布 ImageViewer1.Canvas.Font.Size := 15; ImageViewer1.Canvas.Font.Family := 'Arial'; ImageViewer1.Canvas.Font.Style :=

我使用RAD Studio XE6,我有一个简单的fire monkey表单,用于打印图像。我想如果我能在打印前创建一个预览功能来显示最终图像,那将是一个好主意。为此,我尝试使用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组件中没有显示任何内容。我做错什么了吗?

您创建的不是打印预览。

打印预览显示方向、页边距等。如果要创建打印预览,应执行以下操作:


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


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

您知道这里没有创建打印预览,对吗?您正在为打印数据创建数据预览。打印预览包含从打印机收集的打印信息,如DPI、页边距、页面大小、方向等(此外,您的问题可能是您正在ImageViewer外部创建数据预览。请尝试使用(0,0)作为画布的原点。)从上面的代码中可以看出,这就是我正在做的事情,但是,正如我在问题中所解释的那样,到目前为止,它还没有发挥出那么大的作用。那么,阅读我的其他评论并尝试我提出的解决方案怎么样?“另外,您的问题可能是您正在ImageViewer外部创建数据预览。请尝试使用(0,0)作为画布的原点。”我尝试创建一个从0,0开始的目标画布,但没有任何更改。搜索一段时间后,我相信这与此有关,我想我画的是表格,而不是may TImage组件。