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