请使用TPrinter的本地实例

时间:2010-04-16 06:44:12

标签: delphi printing

我需要使用TPrinter进行一些打印。问题是由于各种原因,我不能使用Global object Printer。

我希望能够创建我的TPrinter实例并使用该实例进行打印。

我尝试过:

MyPrinter := TPrinter.Create;
MyPrinter.BeginDoc;

但这会产生AV。

知道使用我的TPrinter实例打印内容需要什么?

此致 Goran Nagy

2 个答案:

答案 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;