Ich nehme mal an, dass
Printer : TPrinter; eine GLOBALE Varable ist, denn sie ist in der Procedure nicht deklariert.
Besser ist es, sie LOKAL zu deklarieren, um auszuschliessen, dass andere evtl. langsame, parallele Threads die Variable ändern.
Das Druckergebnis hängt auch vom BS und vom Drucker ab (Stichwort:
GDI,
OPENGL)
Ein TPrinter-Objekt wird automatisch erzeugt, wenn es nil ist.
Ich habe aber auch schon lokal ein TPrinter-Objekt erzeugt, was keine Veränderung mit sich gebracht hat.