Pen*_*ino 1 printing delphi runtime-error
任何人都可以解释这应该如何工作(在Windows10上运行Delphi XE2)?
在极简主义的应用程序 - 带有两个按钮的表单 - 中包含以下代码:
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;
Run Code Online (Sandbox Code Playgroud)
如果我单击Button1,程序将在我的默认打印机上打印"Hello World",并在关闭它时正常关闭(使用关闭按钮).如果相反,我点击Button2,程序打印一个相同的页面,但现在当我关闭关闭按钮时,我收到错误217消息.
我无法在Delphi文档中找到有关如何使用Printer函数和TPrinter变量的说明.我很高兴使用Button1技术的派生来打印 - 如果确认这是'防弹'的方法,但想了解为什么Button2方法不起作用.我是否应该假设释放任何我实例化的TPrinter对象不是我的责任,还是有更明确的解释?
当您运行此代码时:
MyPrinter := Printer;
MyPrinter.BeginDoc;
MyPrinter.Canvas.TextOut(10,10,'Hello World');
MyPrinter.EndDoc;
MyPrinter.Free;
Run Code Online (Sandbox Code Playgroud)
Printer在功能退出时删除.因此,当应用程序终止时,它会再次尝试删除它,并且您会收到错误消息.不仅如此,如果您尝试第二次运行此代码,它也会提升.MyPrinter只是一个指向全局TPrinter对象的指针,由Printer函数返回.你不应该删除你没有创建的东西.
Printer功能文档:
返回TPrinter的全局实例以管理与打印机的交互.
Printer在第一次调用时创建全局TPrinter对象的实例.使用打印机功能使用TPrinter对象进行打印.
注意:应用程序关闭时,将自动释放全局TPrinter对象.调用SetPrinter后,将不会自动释放返回的打印机.调用者有责任释放返回值,或者使用另一个调用SetPrinter来替换它,并释放第二个SetPrinter调用返回的替代打印机.
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |