Das Problem steckt vermutlich in den Schreibzugriffen auf Printer.PrinterIndex, die im besten Fall eine Auswahl des Standarddruckers auslösen, aber Zugriffe auf andere Drucker der Statussteuerung in TPrinter überlassen, die dann zwar einen Gerätekontext herstellt, aber keinen WIN
API OpenPrinter Aufruf erzeugt (Zitat aus
unit Printers):
Delphi-Quellcode:
procedure TPrinter.SetPrinterIndex(Value: Integer);
begin
CheckPrinting(False);
if (Value = -1) or (PrinterIndex = -1) then SetToDefaultPrinter
else if (Value < 0) or (Value >= Printers.Count) then RaiseError(SPrinterIndexError);
FPrinterIndex := Value;
FreeFonts;
SetState(psNoHandle);
end;
Ich hab' nun in meiner Anwendung alle Schreibzugriffe auf Printer.PrinterIndex durch Printer.Setprinter ersetzt:
Printer.SetPrinter(PChar(Druckername),PChar('WINSPOOL'),PChar(''),0);
wobei die Variable Druckername mit einem Eintrag aus Printer.Printers besetzt wird.
Jetzt druckt auch der vorher so faule Netzwerkdrucker!
Danke an alle, die mitgeholfen haben!