Home » Tutorials » Object Pascal/RTL » Drucken

Drucken

TPrinter

Das Besondere an der Klasse TPrinter ist, dass wir keine Instanz (mit Create) erzeugen müssen. Stattdessen verwendet man die in der Unit Printers enthaltene Funktion Printers als globale Instanz. Das bedeutet, wir müssen lediglich die Unit Printers in die Uses-Klausel aufnehmen, und schon können wir (ohne Deklarieren oder Erzeugen einer Variablen) über „Printer“ auf den Drucker zugreifen. Das gibt uns auch gleich die Möglichkeit, uns beim Betriebssystem zu erkundigen, welche Drucker überhaupt zur Verfügung stehen und wie diese eingerichtet sind.

Die vorhandenen Drucker anzeigen

Sollen in einer ListBox alle installierten Druckertreiber angezeigt werden (ob wirklich ein realer Drucker dazu existiert, kann das Betriebssystem ja nicht wissen), genügt folgender Code:

uses Printers;
...
ListBox1.Items.Assign(Printer.Printers);

Weiteres über TPrinter, wie z.B. ein neuer Standarddrucker festgelegt werden kann, ist in der VCL-Hilfe unter TPrinter zu finden.

Ablauf

Um etwas zu drucken – und das ist ja das Ziel dieses Tutorials -, verwenden wir das Printer-Objekt. Ihm kann man sagen, wenn das Erstellen eines Ausdrucks beginnt und wenn es abgeschlossen ist. Das Letztere darf nicht vergessen werden. Denn erst, wenn ein Ausdruck vom Programm abgeschlossen ist, wird überhaupt erst der Drucker informiert, dass es etwas zu tun gibt.
Die Schritte sind also Folgende:

uses Printers;
...
Printer.BeginDoc;
// Hier kommt die eigentliche Ausgabe
// dazu später
Printer.EndDoc;

U. a. hat Printer auch eine Eigenschaft Canvas. Solch eine Leinwand benötigen wir ja, um die Ausgabe darauf zu zeichnen; und zwar zwischen BeginDoc und EndDoc. Die Sache hat nur einen Haken: Wenn man nichts dagegen unternimmt, werden alle verwendeten Koordinaten als Werte mit der Einheit Pixel verstanden. Je nach dem wie hoch die Auflösung eines Druckers eingestellt ist, kommen also sehr unterschiedliche Ausdrucke zustande. Dagegen sollten wir etwas unternehmen. Dazu mehr im nächsten Abschnitt.