![]() |
Bon Drucker ansteuern
Hallo,
ich bin neu hier und habe in delphi6 nur einige kleinere und einfache Programme geschrieben. Nun habe ich das Problem, daß ich für unseren Verein einen Bon-Drucker Epson TM U300 ansteuern müßte. Das heißt ein kleines Kassenprogramm (steht soweit) in dem programm wird nun der Kassenbon erstellt und sollte an den Druckerr übergeben werden. Ich bekomme es aber nicht gebacken wie ich den Inhalt der Variablen an den Drucker bekomme ebnso wie das abschneiden des Bon, sowie sonstige Steuerzeichen für Vorschub, Schrift usw.. Habe schon allerlei Beiträge gelesen und ausprobiert aber nichts geht. Bin kurz vor der Verzweiflung. kann mir jemand aus dem Forum helfen oder hat jemand eine fertige Lösung. |
AW: Bon Drucker ansteuern
Wie ist der Bondrucker angeschlossen? Welche Schnittstelle?
war ein Demoprogramm dabei? Evtl. mit Source? Welche Firma, welches Modell? Gibt's ne Anleitung/eine Doku? :oops: Sorry, streichen wir das :angel: |
AW: Bon Drucker ansteuern
Zitat:
|
AW: Bon Drucker ansteuern
Der Drucker scheint die ESC/POS Kommandos zu verabeiten.
![]() |
AW: Bon Drucker ansteuern
jeden Bondrucker von Epson kannst du als Drucker lokal installieren. Damit solltest du normal drucken können. Vieleicht sind spezielle Funktionen so nicht verfügbar aber als Bondrucker für die Kasse allemal ausreichend.
:hi: |
Dieses Thema wurde am "29. Jul 2010, 20:23 Uhr" von "Daniel" aus dem Forum "Software-Projekte der Mitglieder" in das Forum "Programmieren allgemein" verschoben.
|
AW: Bon Drucker ansteuern
Für die Epson-Drucker gibt es normale Windows-Treiber zu installieren, siehe auch haentschman's Hinweis obendrüber.
Für den Rest, also drucken mit diesem Treiber, solltest Du mal in den Tutorials bzw. mit der Suchfunktion nach "Canvas Drucken" Ausschau halten. Ganz grob, gibt aber noch jede Menge Funktionen um Fonts etc. zu beeinflussen:
Delphi-Quellcode:
Für die Geschichten wie Bon abtrennen, würde ich bei Epson vermuten, dass es eine spezielle ESC-Sequenz dafür gibt.
// Printer ist eine globale Funktion aus printers
printer.begindoc; printer.canvas.textout(x, y, textvar); printer.enddoc; |
AW: Bon Drucker ansteuern
ich hab hier mal aus einem ca 10 Jahren alten Quellcode einen Teil extrahiert, der noch heute im Einsatz ist mit einem Epson TM88 (ist ziemlich ähnlich, nur mit Parallelport).
Das ist nicht schön, aber läuft und sollte alles können was du angefragt hast, schneiden geht mit printer.NewPage; oder printer.Enddoc; Falls nicht ist irgendwas im Treiber nicht korrekt eingestellt. Gruß Holger ![]() p.s.: Der langjährige spätabendliche Aufenthalt in Hotelbars und Kneipen nach Konferenzen diente ausschließlich dazu, die Prozesse für dieses Softwareprojekt besser zu verstehen und zu verbessern :cheers:
Delphi-Quellcode:
procedure Tfrm_kasse.drucke_kundenbeleg(teilrechnung:Boolean); procedure smm; begin setmapmode(printer.Handle,mm_lometric); printer.Canvas.Font.Name:='Arial'; printer.Canvas.Font.Height:=45; end; var p,i:integer; s,beleg_id:string; sum:Double; tbl,tblp:TIBOTable; seite:integer; procedure printkopf; begin p:=-10; smm; s:=ini.ReadString('ADR','NAME1','INIFILE.NAME1'); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=ini.ReadString('ADR','NAME2','INIFILE.NAME2'); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=ini.ReadString('ADR','NAME3','INIFILE.NAME3'); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=ini.ReadString('ADR','NAME4','INIFILE.NAME4'); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=ini.ReadString('ADR','NAME5',''); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=ini.ReadString('ADR','NAME6',''); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=ini.ReadString('ADR','NAME7',''); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=ini.ReadString('ADR','NAME8',''); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:='Rechnung vom '+dateToStr(date); printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:='Tisch:'+tbl_tisch.FieldByName('bez').AsString+':'+tbl_tisch.FieldByName('bezeichnung').AsString; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:='Belegnr:'+tbl.FieldByName('NR').AsString; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); end; begin seite:=1; if teilrechnung then begin tbl:=tbl_beleg2; tblp:=tbl_beleg_positionen2; end else begin tbl:=tbl_beleg; tblp:=tbl_beleg_positionen; end; tbl.refresh; tblp.refresh; beleg_id:=tbl.FieldByName('id').AsString; qry.SQL.Text:='select bez,bezeichnung,einzelpreis,sum(anzahl) as anzahl from beleg_positionen where beleg_id='+beleg_id+' group by bez,bezeichnung,einzelpreis'; qry.Open; if qry.RecordCount>=8 then begin printer.begindoc; p:=-10; while not qry.eof do begin if p<-2500 then begin printer.NewPage; smm; p:=100; end; smm; printer.Canvas.TextOut(10,p,qry.FieldByName('anzahl').AsString); smm; printer.Canvas.TextOut(60,p,qry.FieldByName('bezeichnung').AsString); smm; s:=floattostrf(qry.FieldByName('Einzelpreis').Asfloat,fffixed,15,2); printer.Canvas.TextOut(710-printer.Canvas.textwidth(s),p,s); p:=p-100; qry.Next; end; printer.Canvas.TextOut(390,p-200,'-'); printer.enddoc; end; qry.Close; printer.begindoc; tblp.First; printkopf; p:=p-50; sum:=0; while not tblp.eof do begin if p<-2500 then begin smm; p:=p-50; printer.Canvas.TextOut(350,p,'-'+inttostr(seite)+'-'); printer.NewPage; seite:=seite+1; smm; printkopf; p:=p-50; printer.Canvas.TextOut(350,p,'-'+inttostr(seite)+'-'); end; p:=p-50; smm; printer.Canvas.TextOut(10,p,tblp.FieldByName('anzahl').AsString); smm; printer.Canvas.TextOut(60,p,tblp.FieldByName('bezeichnung').AsString); smm; s:=floattostrf(tblp.FieldByName('Einzelpreis').Asfloat,fffixed,15,2); printer.Canvas.TextOut(580-printer.Canvas.textwidth(s),p,s); smm; s:=floattostrf(tblp.FieldByName('Einzelpreis').Asfloat*tblp.FieldByName('anzahl').AsFloat,fffixed,15,2); printer.Canvas.TextOut(710-printer.Canvas.textwidth(s),p,s); sum:=sum+tblp.FieldByName('Einzelpreis').Asfloat*tblp.FieldByName('anzahl').AsFloat; tblp.Edit; tblp.FieldByName('status').AsString:='R'; tblp.post; tblp.Next; end; p:=p-50; printer.Canvas.TextOut(10,p,'----------------------------------------------------'); p:=p-50; printer.Canvas.TextOut(10,p,'SUMME'); s:=floattostrf(sum,fffixed,15,2)+'€'; printer.Canvas.TextOut(710-printer.Canvas.textwidth(s),p,s); smm; p:=p-50; p:=p-50; p:=p-50; qry2.Close; qry2.sql.Text:='select '+#13#10+ ' case b.ah '+#13#10+ ' when ''J'' then cast(a.ust_ah as numeric(18,2)) '+#13#10+ ' when ''N'' then cast(a.ust_ih as numeric(18,2)) '+#13#10+ ' end Mwst, '+#13#10+ ' sum(cast(bp.einzelpreis*bp.anzahl as numeric(18,2))) brutto, '+#13#10+ ' sum(case b.ah '+#13#10+ ' when ''J'' then cast((bp.einzelpreis*bp.anzahl)*100/(100+a.ust_ah) as numeric(18,2)) '+#13#10+ ' when ''N'' then cast((bp.einzelpreis*bp.anzahl)*100/(100+a.ust_ih) as numeric(18,2)) '+#13#10+ ' end) netto, '+#13#10+ ' sum(case b.ah '+#13#10+ ' when ''J'' then cast((bp.einzelpreis*bp.anzahl)*a.ust_ah/(100+a.ust_ah) as numeric(18,2)) '+#13#10+ ' when ''N'' then cast((bp.einzelpreis*bp.anzahl)*a.ust_ih/(100+a.ust_ih) as numeric(18,2)) '+#13#10+ ' end) Steuer '+#13#10+ ' from beleg b '+#13#10+ ' join beleg_positionen bp on bp.beleg_id=b.id '+#13#10+ ' join artikel a on a.id=bp.artikel_id '+#13#10+ ' where '+#13#10+ ' b.id='+tbl_beleg.fieldbyname('ID').AsString+#13#10+ ' group by 1';//hk s:='Mwst %'; printer.Canvas.TextOut(200-printer.Canvas.textwidth(s),p,s); s:='Summe'; printer.Canvas.TextOut(370-printer.Canvas.textwidth(s),p,s); s:='Netto'; printer.Canvas.TextOut(540-printer.Canvas.textwidth(s),p,s); s:='Mwst'; printer.Canvas.TextOut(710-printer.Canvas.textwidth(s),p,s); smm; p:=p-50; qry2.open; while not qry2.Eof do begin s:=floattostrf(qry2.Fields[0].AsFloat,fffixed,15,2)+'%'; printer.Canvas.TextOut(200-printer.Canvas.textwidth(s),p,s); s:=floattostrf(qry2.Fields[1].AsFloat,fffixed,15,2)+'€'; printer.Canvas.TextOut(370-printer.Canvas.textwidth(s),p,s); s:=floattostrf(qry2.Fields[2].AsFloat,fffixed,15,2)+'€'; printer.Canvas.TextOut(540-printer.Canvas.textwidth(s),p,s); s:=floattostrf(qry2.Fields[3].AsFloat,fffixed,15,2)+'€'; printer.Canvas.TextOut(710-printer.Canvas.textwidth(s),p,s); smm; p:=p-50; qry2.Next; end; qry2.Close; if MessageDlg('ohne Bewirtungsbeleg?',mtConfirmation,[mbYes,mbNo],0)=mrNo then begin printer.NewPage; printkopf; p:=p-50; smm; s:='Bewirtungsaufwand Angaben'; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:='(Par. 4, Abs. 5, Ziff. 2 EkStg)'; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:=''; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); s:='Mwst %'; printer.Canvas.TextOut(200-printer.Canvas.textwidth(s),p,s); s:='Summe'; printer.Canvas.TextOut(370-printer.Canvas.textwidth(s),p,s); s:='Netto'; printer.Canvas.TextOut(540-printer.Canvas.textwidth(s),p,s); s:='Mwst'; printer.Canvas.TextOut(710-printer.Canvas.textwidth(s),p,s); smm; p:=p-50; qry2.open; while not qry2.Eof do begin s:=floattostrf(qry2.Fields[0].AsFloat,fffixed,15,2)+'%'; printer.Canvas.TextOut(200-printer.Canvas.textwidth(s),p,s); s:=floattostrf(qry2.Fields[1].AsFloat,fffixed,15,2)+'€'; printer.Canvas.TextOut(370-printer.Canvas.textwidth(s),p,s); s:=floattostrf(qry2.Fields[2].AsFloat,fffixed,15,2)+'€'; printer.Canvas.TextOut(540-printer.Canvas.textwidth(s),p,s); s:=floattostrf(qry2.Fields[3].AsFloat,fffixed,15,2)+'€'; printer.Canvas.TextOut(710-printer.Canvas.textwidth(s),p,s); smm; p:=p-50; qry2.Next; end; qry2.Close; p:=p-50; smm; s:=''; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; smm; s:='Tip:'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='Gesamt:'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:=''; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='Unterschrift Kellner'; printer.Canvas.TextOut(20,p,s); p:=p-100; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:=''; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='Bewirtete Personen'; printer.Canvas.TextOut(20,p,s); for i:=1 to 4 do begin p:=p-50; smm; s:=''; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); end; p:=p-50; smm; s:='Anlass der Bewirtung'; printer.Canvas.TextOut(20,p,s); p:=p-100; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='Höhe der Aufwendungen'; printer.Canvas.TextOut(20,p,s); p:=p-100; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='bei Bewirtung im Restaurant'; printer.Canvas.TextOut(20,p,s); p:=p-100; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='in anderen Fällen'; printer.Canvas.TextOut(20,p,s); p:=p-100; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='Ort Datum'; printer.Canvas.TextOut(20,p,s); p:=p-100; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); p:=p-50; smm; s:='Unterschrift'; printer.Canvas.TextOut(20,p,s); p:=p-100; smm; s:='..........................................................'; printer.Canvas.TextOut(20,p,s); end; p:=p-50; s:='Vielen Dank für Ihren Besuch !'; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); p:=p-50; s:='Beehren Sie uns recht bald wieder !'; printer.Canvas.TextOut(390-round(printer.Canvas.textwidth(s)/2),p,s); printer.Canvas.TextOut(390,p-200,'-'); printer.enddoc; if teilrechnung then begin tbl.Edit; tbl.FieldByName('status').AsString:='1'; tbl.post; end; end; |
AW: Bon Drucker ansteuern
Hi,
danke für die Antworten, ich habe mein Problem etwas ungenau geschildert, hier noch ein paar Angaben.Also das Problem ist daß es für den TM U300 keine Treiber gibt, aber der Treiber vom U220 laut Epson passen muß. Nur leider steht bei Drucker und Faxgeräte nach der Installation bei Status: nicht verfügbar.(an mehreren PC's getestet, von Epson z.Zt.keine Lösung). Nun möchte ich den DRucker der parallel angeschlossen ist, mit Escape Zeichen direkt ansteuern(habe gelesen, dass das ja gehen soll). Hier kommt es nun zu den Problemen die ich habe, daß alles was ich schon probiert habe nicht klappt. Ich habe mehrere Vorschläge aus den Foren ausprobiert aber es endet immer mit irgentwelchen Fehlermeldungen oder der Drucker druckt endlos. |
AW: Bon Drucker ansteuern
Hallo,
also ich benutze folgendes mit dem TM-U220 und das funktioniert wunderbar:
Delphi-Quellcode:
wobei man natürlich den Port (LPT1) noch als Übergabeparameter implementieren kann.
procedure DruckeAufLPT(Datenliste: TStringList);
var f: TextFile; s: String; i: Integer; begin try try AssignFile(f, 'LPT1'); Rewrite(f); for i:= 0 to datenliste.Count - 1 do begin s:= datenliste[i]; Write(f,s); end; except raise; end; finally closefile(f); end; end; Gruß Matthias |
AW: Bon Drucker ansteuern
Hallo,
mit den Bondruckern kann man sich lange beschäftigen; gerade die von Epson zeigen oft merkwürdige Verhaltensweisen, wie z.B. die genannte Meldung "nicht verfügbar". (Oft druckt er dann aber trotzdem) Am problematischen sind die mit seriellen Schnittstellen. Habe gerade gestern drei dieser Bondrucker über Fernwartung wieder in Gang bringen müssen, nachdem der Kassen-PC eines Kunden den Geist aufgegeben hatte. Bis alles wieder lief waren es gut eineinhalb Stunden (Welche Treiberversion, welcher Drucker ist wo angeschlossen, Baudrate usw). Leider müssen wir diese Teile noch unterstützen da etliche Kunden damit arbeiten. Aber mit vielen neuen Bondruckern unterschiedlicher Hersteller hat man all diese Probleme nicht mehr, da diese mit brauchbaren Windows-Treibern, USB- oder Ethernet-Schnittstelle erhältlich sind und alle Schriften und auch Graphiken schnell drucken. So kann man dann Kassenbons mit Logo usw. komplett mit einem Reportdesigner (wir benutzen Fastreport) erstellen und dass leidige Problem ist vergessen. Auch das Absägen des Bons nach Druck der Seite ist nichts worüber man nachdenken müsste. Lange Rede kurzer Sinn: Weg mit der alten Gurke und neu kaufen. Rechnet man die Zeit für Installation, spezieller Programmierung, Herumprobieren usw. ist das die billigste Lösung und bringt das beste Ergebnis. Gruß Neumann |
AW: Bon Drucker ansteuern
noch ein Tipp am Rande... :hi:
Es besteht auch die Möglichkeit den Bon bzw. die verschiedenen Arten davon mit einem Reportsystem zu basteln. Papierbreite beachten und gut... :zwinker: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz