Home » Tutorials » Object Pascal/RTL » Drucken

Drucken

Die Leinwand

Zunächst einmal muss man sich vom zeilenorientierten Denken verabschieden. Es ist nicht so wie in einem Textprogramm, dass nach einem Zeilenende automatisch eine neue Zeile angefangen wird, die direkt unter die vorige platziert wird. Sondern Text (und natürlich auch Grafik) wird gezeichnet.
Und das Zeichnen kann man sich wirklich wörtlich vorstellen. Immerhin haben wir auch eine Leinwand (englisch Canvas). Leinwände (TCanvas) kommen bei mehreren Steuerelementen vor, z.B. auch bei der Komponente TPaintbox. Hierbei handelt es sich um den gleichen Typ wie bei der „Druckerleinwand“. Es stehen also die gleichen Methoden zum Zeichnen zur Verfügung, die wir uns gleich ansehen werden.
Wir stellen uns also eine Leinwand in Papiergröße vor (wie groß das Papier überhaupt ist, werden wir in einem späteren Schritt ermitteln) und beginnen zu zeichnen.

TPen und TBrush

Bevor wir etwas zeichnen, müssen wir uns einen Stift und einen Pinsel aussuchen. Soll heißen für alle folgenden Zeichenoperationen gelten die aktuellen Pen- und Brush-Einstellungen. Solange, bis diese geändert werden. Der Stift (Pen) wird für Umrisse und Texte verwendet, der Pinsel (Brush) ist für das Ausfüllen zuständig.
Folgende Eigenschaften können dabei verändert werden:

Color

Das wichtigste ist wohl die Farbe. Als Zuweisung sind hier alle Delphi-Farbkonstanten (z.B. clBlack für schwarz) möglich sowie generell alles vom Typ TColor (s. VCL-Hilfe).
Um die Füllfarbe (also Brush) auf blau zu setzen, wäre folgender Code nötig:

Canvas.Brush.Color:=clBlue;

Style

Die Eigenschaft Style gibt es zwar sowohl für Pen als auch für Brush; jedoch ist die eine vom Typ TPenStyle, die andere vom Typ TBrushStyle.
Bei Brush sind folgende Werte möglich: bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross – sie beschreiben einfach die Art des Füllens. bsSolid füllt Elemente durchgehend mit der in Color angegebenen Farbe. Bei bsClear passiert nichts (durchsichtige Farbe), bei den restlichen Werten erhält man gestreifte Muster.
Bei Pen sind folgende Werte möglich: psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame – hier wird also die Art der Linie festgelegt, ob durchgehend oder gestrichelt.

Width

Bei Linien kann natürlich noch eine Dicke angegeben werden. Das geschieht über die Eigenschaft Width. Bei Brush ist diese Eigenschaft (logischerweise) nicht zu finden.

Was ist nun mit TCanvas alles möglich?

Folgende Methoden sollen nur exemplarisch für die Möglichkeiten von TCanvas, der Leinwand, stehen. Weitere sind in der VCL-Hilfe unter TCanvas zu finden.
Alle Zeichenelemente werden mit den gerade aktuellen Einstellungen von Brush und Pen gezeichnet.

MoveTo

Eine wichtige Methode ist MoveTo. Sie bewegt den Zeichenstift (ohne zu zeichnen) zu einer bestimmten Position, die durch x und y angegeben wird. An dieser Stelle wird dann die folgende Grafioperation durchgeführt. Z.B. die Methode LineTo, der beim Aufruf nur die Zielkoordinaten übergeben werden.

Ellipse

Wer einen Kreis zeichnen will, sollte bedenken, dass ein Kreis nur eine spezielle Ellipse ist. Um eine Ellipse zu zeichnen, werden die Maße des umgebenden Rechtecks angegeben.

Polygon

Das Polygon wird durch ein Array von Punkten (x-y-Werten) definiert.

TextOut

Neben grafischen Gebilden lässt sich auch Text ausgeben. Der Methode TextOut werden dabei die Startkoordinaten und der zu zeichnende Text mitgegeben.
Vorher sollten Schriftart, -farbe, und -stil festgelegt werden. Das geschieht über die Eigenschaft Font von Canvas, z.B.

Canvas.Font.Name:='Arial';
Canvas.Font.Color:=clBlack;
Canvas.Font.Style:=[fsBold]; //normaler Stil wäre Style:=[]
Canvas.Font.Size:=10; //in pt

Um dieses Ganze jetzt auch praktisch anwenden zu können, ist natürlich noch eine konkrete Leinwand nötig, nämlich die „Drucker-Leinwand“, die in der Unit Printers verfügbar ist. Dazu mehr im nächsten Abschnitt.