Hi,
besser spät als nie....
Beispiel wie man druckt:
Delphi-Quellcode:
unit uFunctions;
interface
uses
printers,
procedure PrintSomething(
const aPrinterName:
string);
implementation
procedure PrintSomething(
const aPrinterName:
string);
var
idx: integer;
begin
idx := Printers.Printer.Printers.IndexOf(aPrinterName);
if (idx = -1)
then
begin
// Der Printername existiert nicht!
MessageBox(0, PChar(
'
Printername ' + aPrinterName + '
exisitiert nicht!'#13#10 +
'
Diese Printernamen sind möglich:'#13#10 +
Printers.Printer.Printers.Text), '
Fehler!', 0);
exit;
end;
Printers.Printer.PrinterIndex := idx;
// Printer session öffnen
Printers.Printer.BeginDoc();
// Seite 1
Printers.Printer.Canvas.TextOut(50, 50, '
Seite1');
// Seite 2
Printers.Printer.NewPage();
Printers.Printer.Canvas.TextOut(50, 50, '
Seite2');
// Seite 3
Printers.Printer.NewPage();
Printers.Printer.Canvas.TextOut(50, 50, '
Seite3');
// Printer session schliessen
Printers.Printer.EndDoc();
end;
end.
Das geht auch problemlos mit Netzwerkdrukkern die einen eigenen Printserver integeriert haben.
Wichtig ist hierbei
Printers.Printer.PrinterIndex := idx;, da die Printers
unit einen Fehler enthält und mit *.EndDoc() den
DC des Druckers nicht freigiebt. Das führt mit Netzwerkdruckern regelmässig zu Problemen (speziell HP).
Wird jedoch
Printers.Printer.PrinterIndex := idx; oder auch einfach
Printers.Printer.PrinterIndex := Printers.Printer.PrinterIndex; vor *.BeginDoc(); ausgeführt ist das
DC Handle freigegeben und alles geht ohne Probleme.
Hoffe das hilft euch weiter.
Gruss
O.