Einzelnen Beitrag anzeigen

Xanadu

Registriert seit: 8. Mai 2005
Ort: Schwäbisch Gmünd
20 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: Sonderfunktionen eines Drucker ermitteln und setzen?

  Alt 28. Jul 2005, 00:48
Hi marabu,

ich bin jetzt ein Stückchen weiter gekommen. Dein Lösungsansatz war mir noch nicht so genehm weil es einfach einen klareren Ansatz in Punkto Programmierung geben muss.

Von Ricoh hab ich zwar noch immer keine Antwort - spricht für den Hersteller, scheint also sehr lean oder outgesourced zu sein - also da kann man wirklich für billiges Geld kaufen zu können! - TCO!...?

Mein Händler hat mich aber zwischenzeitlich um ein "Printfile" gebeten und das Thema hat mich weiter gebracht.

Mit einem Printerdialog bzw. einem PrinterSetupDialog vor dem Druck tut es. Ich hab dann einfach mal PrinterDialog.Options := [poPrintToFile] gesetzt und in eine Datei gedruckt. Das Ergebnis war, dass nach dem Printer.BeginDoc schon Daten im Druckspooler sind bevor mit Escape(...) Sequenzen rüber gehen. das scheint den Drucker zu irritieren weil er von den beiden Dialogen (PrintDialog und PrinterSetupDialog) gewohnt ist seine PJL-Commands am Anfang des Druckstreams zu kriegen.

Habe darauf hin in der printers.pas nachgeschaut was bei BeginDoc so passiert und da geht einiges ab.

Zur Info gibt es von Borland einen Hinweis ohne TPrinter zu drucken Drucken ohne TPrinter, zum Anderen hab ich auch noch was gefunden um ohne PrinterDialog (und PrinterDialog.Options := [poPrintToFile]) etc. DialogLos in eine Datei zu drucken Druck in eine Datei Drucken

Ggf. ist bei letztem Link noch ein Refresh zu machen weil man sonst beim ersten Aufruf nicht immer auf dem Link selbst landet.

Mein Problem scheint nun irgendwo zwischen dem Dialog und direkt nach Printer.BeginDoc zu liegen. Im TPrinterSetupDialog gibt es ein Konstrukt lpszIrgendwas:= DialogHook und ich vermute, dass an dieser Stelle über ein Hook irgend ein PStringPointer vom Hersteller initialisiert wird in dem dann die ganzen @PJL-Befehle vor dem eigentlichen Printer.BeginDoc stehen.

Wenn meine Suche erfolgreich ist poste ich das natürlich, bin jetzt aber noch am suchen wo ich die Initalisierung reinbauen muss.

ImKlartext habe ich im PrintFile mit Dialog sowas wie
Zitat:
<ESC>-12345X@PJL SET USERCODE="xy"&%$...
stehen
und ohne Dialog aber mit Escape dirkt nach Printer.BeginDoc sowas wie
Zitat:
&%$..%<ESC>-12345X@PJL SET USERCODE="xy"§$&...
stehen

(&%$.. sind dabei natürlich Platzhalter und <ESC> steht für #27)

Schlussfolgerung für mich ist daher das Printer.BeginDoc schon einen Elementarstrom an Daten an den Drucker schickt und ich bisher mit meiner Escape-Sequenz soweit zu spät gekommen bin das der Drucker das einfach nicht mehr interpretiert weil es nicht am Anfang steht.

Direkt vor Printer.BeginDoc tut Escape(...) ...Use PASSTHROUGH Escape to Send Data Directly to Printer? noch nicht weil der Drucker(Treiber) bzw. der Spooler noch nicht "Printing" ist. Also kann es nur zwischen vor und direkt nach Printer.BeginDoc liegen. Nachdem da nix ist kann es also nur irgendeine wilde C-Struktur oder Printer.BeginDoc selbst sein.

Wenn irgendwo noch eine Idee zu diesem Thema da ist bin ich (geiffer ) gern und willentlich offen, andernfalls ist halt try und ggf. except statt finally angesagt.

Insgesamt danke an marabu für den Workaraound, will aber das Problem bewältigen und nicht umschiffen.

Gruß, Bernd
  Mit Zitat antworten Zitat