![]() |
Ausgabe auf dem Canvas des Druckers
In der Code-Library gibt es bereits 2 Themen, die zeigen, wie man Text ausdrucken kann (
![]() ![]() ![]() Benötigt werden hierfür ein TPrintDialog (Register: Dialoge), eine TListBox und ein TButton (jew. Register Standard).
Delphi-Quellcode:
Sollen Grafiken/Bilder mit ausgedruckt werden ist es sinnvoller, alles in einem internen Bitmap auszugeben (Stichwort: TBitmap) und anschließend das Bitmap an den Drucker zu senden. Im MSDN wird dies ebenfalls so gemacht:
(*
* Author : Michael Puff - [url]http://www.michael-puff.de[/url] * Date : 2006-04-21 * License : PUBLIC DOMAIN *) uses Printers; procedure PrintLine(Canvas: TCanvas; const Line: string; idx, OffSetLeft, OffSetTop, Step: Integer); begin Canvas.TextOut(OffSetLeft, Step * idx + OffSetTop, Line); end; procedure TForm1.Button1Click(Sender: TObject); const TOPMARGIN = 20; // Millimeter BOTTOMMARGIN = 20; // Millimeter LEFTMARGIN = 20; // Millimeter var i, j : Integer; PaperHeight : Integer; begin j := 0; if PrintDialog1.Execute then begin with Printer do begin // Druckjob starten BeginDoc; // Einheit auf 0.1 Millimeter umstellen // Each logical unit is mapped to 0.1 millimeter. Positive x is to the right; positive y is up. SetMapMode(Canvas.Handle, MM_LOMETRIC); // Blatthöhe in Millimetern PaperHeight := GetDeviceCaps(Canvas.Handle, VERTSIZE); // Schriftgröße Canvas.Font.Size := 7; // Schriftart Canvas.Font.Name := 'Courier New'; for i := 0 to ListBox1.Items.Count - 1 do begin PrintLine(Printer.Canvas, // Ziel-Canvas, hier Drucker, kann aber auch Formular oder sonst was sein Listbox1.Items[i], // zu druckende Zeichenkette j, // Zeile LEFTMARGIN * 10, // Linker Rand (1/10 mm) -TOPMARGIN * 10, // Oberer Rand (1/10 mm). Negativ, weil y ist von unten nach oben -Canvas.Font.Size * 10 // Zeilenabstand (= Schriftgröße), abhängig von Schriftgröße. // Negativ, weil y ist von unten nach oben ); // nächste Zeile Inc(j); // Wenn alles zusammen höher als die Blatthöhe + Ränder wird -> neue Seite // Achtung hier in Millimetern rechnen, da GetDeviceCaps Millimeter ausgibt!!! // Zähler + Zeilenabstand (= Schriftgröße) + oberer Rand + unterer Rand if ((j * Canvas.Font.Size + TOPMARGIN + BOTTOMMARGIN) >= PaperHeight) then begin // neue Seite NewPage; // Zeilenzähler zurücksetzen j := 0; end; end; EndDoc; end; end; end; ![]() [edit=Luckie]Rechtschreibfehler behoben Mfg, Luckie[/edit] |
Re: Ausgabe auf dem Canvas des Druckers
Die Angaben erfolgen in 1/10 Millimeter, will ich also einen Rand von 2 cm haben muss ich die Angaben von TOPMARGIN mal 10 nehmen, da ich diese in Millimetern gemacht habe. Wo hingegen GetDeviceCaps seine Werte in Millimetern zurückliefert und damit man sieht, dass man einmal mit 1/10 Millimetern arbeiten muss und einmal nur mit Millimetern, habe ich das so kommentiert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz