Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Bon Drucker ansteuern (https://www.delphipraxis.net/153342-bon-drucker-ansteuern.html)

Flieger 29. Jul 2010 16:35

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.

jfheins 29. Jul 2010 17:25

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:

omata 29. Jul 2010 17:31

AW: Bon Drucker ansteuern
 
Zitat:

Zitat von jfheins (Beitrag 1038424)
Welche Firma, welches Modell?

-> hat er doch angegeben: Epson TM U300

shmia 29. Jul 2010 17:32

AW: Bon Drucker ansteuern
 
Der Drucker scheint die ESC/POS Kommandos zu verabeiten.
http://nicholas.piasecki.name/blog/w...mand-Guide.pdf

haentschman 29. Jul 2010 18:59

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:

DP-Maintenance 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.

DelphiBandit 30. Jul 2010 07:16

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:
// 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.

IBExpert 30. Jul 2010 08:30

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
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
: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)+'&#8364;';
  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)+'&#8364;';
    printer.Canvas.TextOut(370-printer.Canvas.textwidth(s),p,s);
    s:=floattostrf(qry2.Fields[2].AsFloat,fffixed,15,2)+'&#8364;';
    printer.Canvas.TextOut(540-printer.Canvas.textwidth(s),p,s);
    s:=floattostrf(qry2.Fields[3].AsFloat,fffixed,15,2)+'&#8364;';
    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)+'&#8364;';
      printer.Canvas.TextOut(370-printer.Canvas.textwidth(s),p,s);
      s:=floattostrf(qry2.Fields[2].AsFloat,fffixed,15,2)+'&#8364;';
      printer.Canvas.TextOut(540-printer.Canvas.textwidth(s),p,s);
      s:=floattostrf(qry2.Fields[3].AsFloat,fffixed,15,2)+'&#8364;';
      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;

Flieger 30. Jul 2010 15:46

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.

onkelmehli 30. Jul 2010 17:01

AW: Bon Drucker ansteuern
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:14 Uhr.
Seite 1 von 2  1 2      

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