Thema: Delphi Drucken im Netzwerk

Einzelnen Beitrag anzeigen

Benutzerbild von Skasch
Skasch

Registriert seit: 14. Nov 2005
4 Beiträge
 
#17

Re: Drucken im Netzwerk

  Alt 11. Jun 2008, 10:47
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.
  Mit Zitat antworten Zitat