任何人都可以解释这应该如何工作(在Windows10上运行的Delphi XE2)?德尔福TPrinter和错误217
简约的应用程序 - 包含两个按钮的形式 - 用下面的代码:
procedure TForm2.Button1Click(Sender: TObject);
begin
Printer.BeginDoc;
Printer.Canvas.TextOut(10,10,'Hello World');
Printer.EndDoc;
end;
procedure TForm2.Button2Click(Sender: TObject);
var
MyPrinter : TPrinter;
begin
MyPrinter := Printer;
MyPrinter.BeginDoc;
MyPrinter.Canvas.TextOut(10,10,'Hello World');
MyPrinter.EndDoc;
MyPrinter.Free;
end;
如果我单击Button1,该程序在我的默认打印机打印的“Hello World”,通常当我关闭关闭它(用关闭按钮)。相反,如果我单击Button2,程序将打印一个相同的页面,但现在当我用关闭按钮关闭时,我会收到错误217消息。
我无法在Delphi文档中找到有关如何使用打印机功能和TPrinter变量的说明。我很高兴使用Button1技术的派生物进行打印 - 如果确认这是“防弹”方式,但想了解为什么Button2方法不起作用。我是否应该假设它不是我的负责释放任何我实例化的TPrinter对象,还是有更清晰的解释?
因此,如果我理解正确,Printer函数只是返回一个预先创建的TPrinter对象,该对象设置为与默认打印机相匹配。可以这么说,它不应该被认为是一个TPrinter工厂。那么我是否正确,如果我只是使用打印机,就好像它是一个TPrinter类型的全局变量(而不是Delphi帮助中描述的函数)? – Penguino
是的。打印机函数返回全局“TPrinter”对象的实例,该实例在第一次使用时创建。只要你没有使用'SetPrinter'函数,它就会在应用程序退出时自动释放。 – Ari0nhh
@Penguino'Printer()'函数返回一个RTL为你拥有的'TPrinter'单例对象。根据需要使用'TPrinter'。而且,您也不仅限于默认的打印机。您可以将TPrinter.PrinterIndex属性设置为与其他打印机一起使用。 –