Как использовать локальный экземпляр TPrinter - PullRequest
2 голосов
/ 16 апреля 2010

Мне нужно немного распечатать, используя TPrinter. Проблема в том, что я не могу по разным причинам использовать глобальный объект Printer.

Я хочу иметь возможность создать свой экземпляр TPrinter и распечатать его.

Я пытался с:

MyPrinter := TPrinter.Create;
MyPrinter.BeginDoc;

но это генерирует AV.

Есть идеи, что нужно для печати чего-либо с использованием моего экземпляра TPrinter?

С уважением Горан Надь

Ответы [ 2 ]

1 голос
/ 16 апреля 2010

Объект TPrinter на самом деле не предназначен для локального создания, а предназначен для использования из функции 'singleton' 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;
1 голос
/ 16 апреля 2010

Если вы посмотрите на рынок принтеров, AbortProc использует глобальный объект FPrinter.
Вы можете решить эту проблему, вызвав функцию Printer перед вызовом TPrinter.Create, тогда он не будет генерировать AccessViolation. Это, вероятно, решит вашу проблему, но MyPrinter.Abort НЕ будет работать корректно.

Сообщение о том, почему вы не можете использовать глобальный объект, дает другим пользователям возможность предлагать альтернативные решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...