我需要使用TPrinter进行一些打印。问题是由于各种原因,我不能使用Global object Printer。
我希望能够创建我的TPrinter实例并使用该实例进行打印。
我尝试过:
MyPrinter := TPrinter.Create;
MyPrinter.BeginDoc;
但这会产生AV。
知道使用我的TPrinter实例打印内容需要什么?
此致 Goran Nagy
答案 0 :(得分:1)
如果查看打印机的soucre,AbortProc将使用全局FPrinter对象 您可以在调用TPrinter.Create之前通过调用Printer函数来解决此问题,然后它不会生成AccessViolation。 它将完全解决您的问题,但MyPrinter.Abort肯定不会正常工作。
告诉为什么你不能使用全局对象,让其他用户可以建议替代解决方案。
答案 1 :(得分:1)
TPrinter
对象并非真正设计为在本地创建,而是设计为在Printer
单元中的“单例”函数Printers
中使用。通常你会使用它。
来自帮助:
使用TPrinter管理应用程序执行的任何打印。通过调用打印机单元中的打印机功能获取TPrinter的实例。
编辑:实际上,我认为你可以做这样的事情:
procedure PrintThings;
var
LMyPrinter: TPrinter;
LOldPrinter: TPrinter;
begin
LMyPrinter := TPrinter.Create;
try
LOldPrinter := SetPrinter(LMyPrinter);
try
// your printing code goes here
finally
SetPrinter(LOldPrinter);
end;
finally
LMyPrinter.Free;
end;
end;