Autor |
Beitrag |
gargoyl
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 15.03.07 12:11
Hi
Das Problem ist folgendes:
ich habe einen Drucker an LPT2 angeschlossen an welchen ich ESC-Kommandos sende welches auch problemlos funktioniert. Dieser Drucker wird jedoch in zukunft nur noch eine USB Schnittstelle besitzen und ich weiß leider nicht wie ich diese direkt ansprechen kann.
Im Forum habe ich schon gesucht jedoch wurden die informationen von Jahr zu Jahr immer magerer und letztendlich wurde bisher dazu auch keine Lösung vorgebracht.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var f:textfile; s:string; begin AssignFile(f,'LPT2:'); Rewrite(f); WriteLn(f,'TEXT'); s:=chr(27)+'ME'; WriteLn(f,s); CloseFile(f); end; |
grüße Gargoyl
|
|
Backslash
      
Beiträge: 202
WIN XP
Delphi 5 Ent, Delphi 2005 Prof
|
Verfasst: Do 15.03.07 13:33
Hast du schonmal drüber nachgedacht mit TPrinter zu arbeiten?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| uses Printers;
Printer.BeginDoc; Printer.NewPage; Printer.EndDoc; |
Nachtrag: Wenn du mit verschiedenen Druckern arbeitest, dann solltest du noch einen Dialog zum Wählen des Druckers auf deinem Formular unterbringen. Wenn du diesen Dialog aufrufst, dann wird der Drucker automatisch gesetzt. So kannst du deinen USB-Drucker wählen. Das ganze funktioniert bei mir einwandfrei. Wenn du allerdings weiter ESC-Kommandos senden möchtest, kann ich dir leider nicht viel weiter helfen. Zu TPrinter findest du hier sehr viel im Forum.
Ich schau nochmal ob ich was zum Direktzugriff auf einen USB-Drucker finde. Wenn ja, dann melde ich mich innerhalb der nächsten 2 Stunden in diesem Thread. Wenn nicht, kannst du davon ausgehen dass ich versagt hab
Gruß
Backslash
Nachtrag: Sorry und  , hatte ich vergessen 
|
|
Backslash
      
Beiträge: 202
WIN XP
Delphi 5 Ent, Delphi 2005 Prof
|
Verfasst: Do 15.03.07 13:52
Ich denke ich hab die Lösung. Ich hab aus Word heraus mal versucht etwas zu drucken. Dort kommt ja der Druckdialog. Da steht sonst auch "an LPT1:" oder "an LPT2:", etc. Bei meinem Usb-Drucker steht da "USB001"
Guckst du angehängtes Screen
Ich würde jetzt einfach
Delphi-Quelltext 1:
| AssignFile(f,'USB001'); |
oder
Delphi-Quelltext 1:
| AssignFile(f,'USB001:'); |
versuchen. Es kann aber auch sein dass dein Drucker am USB 2 Port hängt, oder USB 3 oder 4 oder 5. Das ganze kannst du ermitteln wenn du in word z.B. "Datei/Drucken" im Menü aufrufst und dort den USB-Drucker wählst und schaust an welchem "Port" er hängt
Hoffentlich hilft das. Ich habe es nicht getestet aber das erscheint mir die einzige plausible Lösung.
Gruß
Backslash
Einloggen, um Attachments anzusehen!
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 15.03.07 14:00
Escape-Sequenzen Daten direkt zum Drucker schicken:
www.swissdelphicente.../showcode.php?id=716
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
|
type TPrnBuffRec = record bufflength: Word; Buff_1: array[0..255] of Char; end;
function DirectToPrinter(S: string; NextLine: Boolean): Boolean; var Buff: TPrnBuffRec; TestInt: Integer; begin TestInt := PassThrough; if Escape(Printer.Handle, QUERYESCSUPPORT, SizeOf(TESTINT), @testint, nil) > 0 then begin if NextLine then S := S + #13 + #10; StrPCopy(Buff.Buff_1, S); Buff.bufflength := StrLen(Buff.Buff_1); Escape(Printer.Canvas.Handle, Passthrough, 0, @buff, nil); Result := True; end else Result := False; end;
printer.BeginDoc; try DirectToprinter('This text '); finally printer.EndDoc; end; |
Zuletzt bearbeitet von hathor am Di 29.09.15 16:26, insgesamt 1-mal bearbeitet
|
|
gargoyl 
Hält's aus hier
Beiträge: 4
|
Verfasst: Mi 11.04.07 14:24
Hi
Danke ersteinmal für die Hilfe, die letzte Antwort war so ziemlich das was ich gesucht habe.
Leider gibt es ein Problem und zwar wird die ESC-sequenz an den Drucker geschickt und auch ausgeführt jedoch bleibt der Druckauftrag als "wird gedruckt" bestehen und somit kann der Srucker keine weiteren Kommandos annehmen. Wenn man den Auftrag einfach löscht bricht er den Auftrag komplett ab sprich das Medium wird ausgeworfen.
Hat da jemand einen Idee zu?
grüße gargoyl
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Mi 11.04.07 18:44
gargoyl hat folgendes geschrieben: | Hi
Danke ersteinmal für die Hilfe, die letzte Antwort war so ziemlich das was ich gesucht habe.
Leider gibt es ein Problem und zwar wird die ESC-sequenz an den Drucker geschickt und auch ausgeführt jedoch bleibt der Druckauftrag als "wird gedruckt" bestehen und somit kann der Srucker keine weiteren Kommandos annehmen. Wenn man den Auftrag einfach löscht bricht er den Auftrag komplett ab sprich das Medium wird ausgeworfen.
Hat da jemand einen Idee zu?
grüße gargoyl |
Hallo gargoyl,
keine Lösung, sondern nur die Aufklärung eines Missverständnisses: die PassThrough-Funktion ist nicht als Auftrag an den Drucker gedacht, sondern um INNERHALB eines Druckerauftrags druckerspezifische Kommandos senden zu können. Bei seitenorientierten Druckern wird der Windows-Druckertreiber immer zum Abschluss ein PagePrint o.ä. senden. Das Vorab-Senden von Einstellungen (z.B. mehrere Seiten) funktioniert unter Windows sowieso so gut wie nie, weil der Druckertreiber auch zum Anfang des Jobs alles nach seinen eigenen Einstellungen einrichtet.
Einzeln senden kannst du ESC-Sequenzen möglicherweise, wenn du dir den Drucker noch einmal ohne Treiber einrichtest (Generic-Text), aber wie erwähnt wird das vom eigentlichen Treiber meistens rückgängig gemacht.
Sind Gargoyles nicht die netten Figuren an gotischen Kathedralen?
Gruss Reinhard
|
|
gargoyl 
Hält's aus hier
Beiträge: 4
|
Verfasst: Do 12.04.07 15:15
Also ich mag gothische Kathedralenverzierungen wobei das nicht heißen soll das ich Kathedralen an sich mag,... ^^
nunja wer sucht der findet auch irgentwann mal... auch wenn es ziemlich lange gedauert hat aber.
Das letzte Problem lag ja daran das sich der Treiber in die ganze Druckgeschichte einmischt, was somit die ESC-sequenzen ein wenig beeinflusst hat.
Das ganze kann man umgehn indem man die Befehle direkt an den spooler sendet und den Treiber einfach schlichtweg ignoriert.
www.delphipraxis.net...+drucker+senden.html
idee recht simpel, man muss nur wissen wie man es schreibt
grüße Gargoyl
|
|
Reinhard Kern
      
Beiträge: 591
Erhaltene Danke: 14
|
Verfasst: Do 12.04.07 18:41
gargoyl hat folgendes geschrieben: | Also ich mag gothische Kathedralenverzierungen wobei das nicht heißen soll das ich Kathedralen an sich mag,... ^^
nunja wer sucht der findet auch irgentwann mal... auch wenn es ziemlich lange gedauert hat aber.
Das letzte Problem lag ja daran das sich der Treiber in die ganze Druckgeschichte einmischt, was somit die ESC-sequenzen ein wenig beeinflusst hat.
Das ganze kann man umgehn indem man die Befehle direkt an den spooler sendet und den Treiber einfach schlichtweg ignoriert.
www.delphipraxis.net...+drucker+senden.html
idee recht simpel, man muss nur wissen wie man es schreibt
grüße Gargoyl |
Hallo Gargoyl,
man kann auch die alte DOS-Methode "copy /b esc_cmd.txt lpt1:" weiterverwenden, wenn man LPTx: entsprechend setzt mit dem "net use" - Befehl. Das gilt natürlich zunächst für einen im Netz freigegebenen Drucker, aber auch einen Drucker am lokalen USB-Port kann man freigegeben und mit net use mit LPTx verbinden (net use lpt1 \\MeinComputer\MeinUSBDrucker).
Gruss Reinhard
|
|