Да, EndDoc проверяет флаг FAborted, но вызывает EndPage, даже если FAborted равно True. EndDoc используется только тогда, когда печать завершена полностью и *успешно*.
Процедура Abort предполагает вызов Windows API AbortDoc(), но не делает этого и, следовательно, прерывание процесса печати не останавливает работу принтера. Поэтому, для обхода этой ошибки вам следует вызвать
WinProcs.AbortDoc(Printer.Handle); |
Я исправил модуль PRINTERS.PAS, после чего GPF пока не возникал...
CheckPrinting(True); AbortDoc(Canvas.Handle); FAborted := True; WinProcs.EndDoc(DC); |
- Garry Prefontaine [000409]