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.