AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bon Drucker ansteuern

Ein Thema von Flieger · begonnen am 29. Jul 2010 · letzter Beitrag vom 1. Aug 2010
Antwort Antwort
Seite 1 von 2  1 2      
Flieger

Registriert seit: 23. Jul 2010
2 Beiträge
 
Delphi 2 Desktop
 
#1

Bon Drucker ansteuern

  Alt 29. Jul 2010, 16:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Bon Drucker ansteuern

  Alt 29. Jul 2010, 17:25
Wie ist der Bondrucker angeschlossen? Welche Schnittstelle?
war ein Demoprogramm dabei? Evtl. mit Source?
Welche Firma, welches Modell? Gibt's ne Anleitung/eine Doku?

Sorry, streichen wir das

Geändert von jfheins (29. Jul 2010 um 17:36 Uhr)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Bon Drucker ansteuern

  Alt 29. Jul 2010, 17:31
Welche Firma, welches Modell?
-> hat er doch angegeben: Epson TM U300
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

AW: Bon Drucker ansteuern

  Alt 29. Jul 2010, 17:32
Der Drucker scheint die ESC/POS Kommandos zu verabeiten.
http://nicholas.piasecki.name/blog/w...mand-Guide.pdf
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.298 Beiträge
 
Delphi 12 Athens
 
#5

AW: Bon Drucker ansteuern

  Alt 29. Jul 2010, 18:59
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.
  Mit Zitat antworten Zitat
29. Jul 2010, 19:23
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.
Benutzerbild von DelphiBandit
DelphiBandit

Registriert seit: 19. Feb 2007
Ort: bei Walsrode
165 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Bon Drucker ansteuern

  Alt 30. Jul 2010, 07:16
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:
// Printer ist eine globale Funktion aus printers
printer.begindoc;
printer.canvas.textout(x, y, textvar);
printer.enddoc;
Für die Geschichten wie Bon abtrennen, würde ich bei Epson vermuten, dass es eine spezielle ESC-Sequenz dafür gibt.
Carsten

Geändert von mkinzler (30. Jul 2010 um 07:41 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Bon Drucker ansteuern

  Alt 30. Jul 2010, 08:30
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
www.ibexpert.com

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


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;
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung

Geändert von mkinzler (30. Jul 2010 um 08:34 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Flieger

Registriert seit: 23. Jul 2010
2 Beiträge
 
Delphi 2 Desktop
 
#9

AW: Bon Drucker ansteuern

  Alt 30. Jul 2010, 15:46
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.
  Mit Zitat antworten Zitat
onkelmehli

Registriert seit: 8. Mär 2006
119 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Bon Drucker ansteuern

  Alt 30. Jul 2010, 17:01
Hallo,
also ich benutze folgendes mit dem TM-U220 und das funktioniert wunderbar:

Delphi-Quellcode:
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;
wobei man natürlich den Port (LPT1) noch als Übergabeparameter implementieren kann.

Gruß
Matthias

Geändert von mkinzler (30. Jul 2010 um 17:20 Uhr) Grund: Code-Tag durch Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
Alt 30. Jul 2010, 17:03     Erstellt von onkelmehli
Dieser Beitrag wurde von Matze gelöscht. - Grund: Doppelpost
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz