Oftmals wird gefragt, wie man denn etwas ausdrucken könnte. Es scheint so, als ob damit eine gewisse Schwierigkeit verbunden wäre. Dem ist aber in Wirklichkeit gar nicht so. So wie man nämlich Text und Grafik auf der Fläche (Canvas) eines Fensters ausgeben kann, so kann man auch drucken. Der Drucker besitzt ebenfalls einen Gerätekontext (DC), auf dem man zeichnen kann. Man muss also nur den Gerätekontext des Druckers ermitteln und kann dann wie gewohnt seine Ausgabe machen. Das einzige, das man dabei berücksichtigen muss, ist, dass so ein Blatt Papier irgendwann auch zu Ende ist. Aber selbst das stellt eigentlich kein größeres Problem dar.
Will man also drucken, muss man folgende Aufgaben bewältigen:
Printers.pas" zur Verfügung, die einem etwas Arbeit abnimmt. Ich habe an dieser Stelle bewusst auf sie verzichtet, weil ich zeigen will, was im Hintergrund passiert.Für die Zeichenroutinen unter Windows sind in erster Linie die Funktionen aus der "GDI32.dll" ("GDI.exe" unter Windows 98) zuständig. Sie übernimmt die übergeordnete Logik und überlässt den Treibern dann die eigentliche Ausführung. Zwischen GDI und Treibern findet dabei eine rege Kommunikation statt. Windows kann über den Treiber ermitteln, welche Operation das Gerät selbst ausführen kann, und bei welchen Fällen es Unterstützung in Form einer übergeordneten Logik braucht. Kann eine Grafikkarte beispielsweise selbst keine Linie von Punkt A nach Punkt B zeichnen, berechnet das GDI jeden einzelnen Pixel. Ist die Grafikkarte dazu fähig, bekommt sie nur die entsprechenden Befehlscodes und die Koordinaten.
Hauptziel des GDI ist es, möglichst geräteunabhängig zu sein. Das heißt, wenn die Treiber vorliegen, kann mit ein und der selben GDI-Funktion die Ausgabe sowohl auf dem Bildschirm, als auch auf einem Drucker oder einem Plotter erfolgen, ohne dass man dazu den Code ändern müsste. Mal abgesehen davon, dass man natürlich das Ziel der Zeichenoperation (Bildschirm, Drucker, Plotter, usw.) anpassen muss.
Die Ergebnisse sollten dann (fast) identisch aussehen. Und deswegen schrieb ich ja: Wenn man Text und Grafik auf der Fläche eines Fensters ausgeben kann, kann man auch drucken. Und genau darum geht es jetzt.