【问题标题】:Delphi simple print preview function error?Delphi简单打印预览功能报错?
【发布时间】:2014-10-01 07:32:44
【问题描述】:

我正在使用 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 组件中最终没有显示任何内容。我是不是做错了什么?

【问题讨论】:

  • 您知道您不是在这里创建打印预览,对吗?您正在为打印数据创建数据预览打印预览 包含从打印机收集的打印信息,例如 DPI、边距、页面大小、方向等。(另外,您的问题可能是您在外部创建 数据预览 ImageViewer。尝试使用 (0, 0) 作为画布的原点。)

标签: delphi


【解决方案1】:

您创建的不是打印预览。

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


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

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

【讨论】:

  • 正如您从上面的代码中看到的那样,这就是我正在做的事情,但正如我在问题中所解释的那样,直到现在它还没有那么好。
  • 那么如何阅读我的其他评论并尝试我提出的解决方案? “另外,您的问题可能是您在 ImageViewer 之外创建数据预览。尝试使用 (0, 0) 作为画布的原点。”
  • 我尝试创建一个从 0,0 开始但没有任何改变的目标画布。
  • 搜索了一段时间我认为这与此有关,link 我想我是在表格中绘制而不是在TImage组件中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
相关资源
最近更新 更多