Registriert seit: 10. Feb 2007
Ort: Bersenbrück
547 Beiträge
Delphi 7 Enterprise
|
Canvas-Druck
12. Dez 2007, 15:30
Hallo!
Ich habe mir über die Suchfunktion schon ein Beispiel von Michael Puff rausgesucht, mit dem man Listboxes drucken kann.
Nun möchte ich aber z.B. mehrere Spalten drucken, einen Rahmen setzen und sowas.
Wie kann man Rahmendicke, Spaltenzahl und Alignment festlegen?
Delphi-Quellcode:
procedure THauptform.Drucken1Click(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 := 5;
// Schriftart
Canvas.Font. Name := ' Ariel';
PrintLine(Printer.Canvas, // Ziel-Canvas, hier Drucker, kann aber auch Formulöar oder sonst was sein
' Lehrerliste - Schulname', // 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 * 30 // Zeilenabstand (= Schriftgröße), abhängig von Schriftgröße.
// Negativ, weil y ist von unten nach oben
);
for i := 0 to LbLehShort.Items.Count - 1 do
begin
PrintLine(Printer.Canvas, // Ziel-Canvas, hier Drucker, kann aber auch Formulöar oder sonst was sein
LbLehShort.Items[i]+' - '+LbLehLong.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;
Sven Kannenberg
|
|
Zitat
|