![]() |
Lazarus: Fragen zum Drucken
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
ich fange an mich mit dem Ausdrucken zu beschäftigen und habe folgenden Code aus verschiedenen gefundenen Beiträgen zusammengestellt:
Delphi-Quellcode:
Zwei Punkte sind mir zur Zeit noch unklar:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, PrintersDlgs, Forms, Controls, Graphics, Dialogs, StdCtrls, printers; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; PrintDialog1: TPrintDialog; procedure Button1Click(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); const TOTAL_PAGES = 4; // Maximale Anzahl von Seiten die Gedruckt werden sollen Var TestString:string; page, startPage, endPage : Integer; begin TestString:='abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890 äöüß ÄÖÜ'; // Druckerdaten ermitteln // // erlauben das im Druckerdialog die Option Drucke von Seite x bis Seite y aktiv ist // Set up print dialog options PrintDialog1.MinPage := 1; // Erste erlaubte Seitennummer PrintDialog1.MaxPage := TOTAL_PAGES; // Höchste erlaubte Seitennummer PrintDialog1.ToPage := TOTAL_PAGES; // 1 bis Höchste Erlaubte Seitennummer PrintDialog1.Options := [poPageNums]; // Drucken-Dialog anzeigen if PrintDialog1.Execute then Begin // Den gewählten Drucker ins Memo schreiben Memo1.Append(Printer.Printers[Printer.PrinterIndex]); // maximale Seitenhöhe in Pixel Memo1.Append(IntToStr(Printer.PageHeight)); // maximale Seitenbreite in Pixel Memo1.Append(IntToStr(Printer.PageWidth)); // Prüfen wieviel Platz der gewählte Text auf dem Drucker-Canvas in der Breite braucht Memo1.Append(TestString); Memo1.Append(IntToStr(Printer.Canvas.TextWidth(TestString))); // Prüfen wieviel Platz der gewählte Text auf dem Drucker-Canvas in der Höhe braucht Memo1.Append(TestString); Memo1.Append(IntToStr(Printer.Canvas.TextHeight(TestString))); // Papierausrichtung ermitteln und setzen // poLandscape // Memo1.Append('Ausrichtung = '); //+String(Printer.Orientation)); **** Wie ermitteln? ***** Printer.Orientation:= poLandscape; // Anzahl der im Dialog ausgewählten Kopien setzen Memo1.Append('Es sollen '+IntToStr(PrintDialog1.Copies)+' Kopien erstellt werden.'); Printer.Copies := PrintDialog1.Copies; // Titel des Druckauftrages festlegen Printer.Title := 'Druckauftrag 1'; // Schriftgröße 12 festlegen Printer.Canvas.Font.Size := 36; // Schriftart Verdana festlegen Printer.Canvas.Font.Name := 'Verdana'; // Druckauftrag starten: // Der Befehl startet einen Druckauftrag, (nicht eine neue Seite!) Printer.BeginDoc; // Sollen ALLE Seiten gedruckt werden oder nur von x bis y if PrintDialog1.PrintRange = prPageNums then begin startpage := PrintDialog1.FromPage; endPage := PrintDialog1.ToPage; end else // All pages begin startPage := 1; endPage := TOTAL_PAGES; end; // Set up the start page number page := startPage; // Keep printing whilst all OK while ((not Printer.Aborted) and Printer.Printing) and (page <= endPage) do begin // Schriftfarbe einstellen Printer.Canvas.Font.Color := clBlue; // ******************************************************************* // Einen Text an einer bestimmten Position des Drucker-Canvas drucken // ******************************************************************* Printer.Canvas.TextOut(0,0, 'Page number = '+IntToStr(page)); // *** Warum nicht linke obere Ecke??? Printer.Canvas.TextOut(0,Printer.Canvas.Font.Size*2,teststring); // Die Seitenzahl erhöhen Inc(page); // Eine neue Seite ausgeben solange bis die letzte ausgedruckt wurde if (page <= endPage) and (not Printer.Aborted) then // Neue Seite erstellen: // Dieser Befehl erstellt eine neue Seite und gibt die Möglichkeit auf ihr zu drucken. // Der Befehl kann beliebig oft zwischen Printer.BeginDoc; und Printer.EndDoc; aufgerufen werden. // Für jeden Aufruf wird später eine neue Seite gedruckt. Printer.NewPage; end; // Druckauftrag beenden: Printer.EndDoc; end; end; end.
Gruß HEiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 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 by Thomas Breitkreuz