Einzelnen Beitrag anzeigen

Neumann

Registriert seit: 6. Feb 2006
Ort: Moers
536 Beiträge
 
Delphi 12 Athens
 
#21

AW: ecape-sequenz zum drucker

  Alt 8. Okt 2011, 10:01
Wenn der Windows-Druckertreiber installiert ist, blockiert dieser den Comport. Kein anderes Programm kann ihn dann verwenden. Man kann dann aber einfach den Befehl zum Öffnen der Schublade als Textzeile mit der Schrift 'Control' an den Drucker senden. Ist nur ein Buchstabe, welcher müsste ich nachsehen.

Warum die elende serielle Schnittstelle für den Drucker? Ist extrem langsam und veraltet. Drucken von Graphiken und Truetype-Schriften ist damit unzumutbar.

Weiter habe ich gesehen, dass der Kassenrechner selbst eine Schnittstelle für eine Kassenschublade hat. Warum nicht die verwenden?

Habe das bei Kassenrechnern anderer Herstellern gemacht, funktioniert gut. Hier mal meine Routine, die mit nahezu allen Anschlußmöglichkeiten klarkommt:

Delphi-Quellcode:
procedure opendrawer;
Var
     FH:THandle;
     Buff: array[0..5] of char;
     RetW:DWORD;
     port:string;
begin
 if dm.SchubladeVonRechner then
    begin
      if dm.SchubladeHWPort>$8000 then // Schublade an Drucker mit LPT
      begin
        port:='lpt'+inttostr(dm.SchubladeHWPort-$8000);
        FH:= CreateFile(PChar(Port),
                               GENERIC_READ or GENERIC_WRITE,
                               0, Nil, OPEN_EXISTING, 0, 0);
        if (FH <> INVALID_HANDLE_VALUE) then
        try
           Buff:=#27#112#48#50#250; // Escape-Sequenz
           WriteFile(FH, Buff, 5, RetW, Nil);
        finally
           CloseHandle(FH);
        end;
        FH:= CreateFile(PChar(Port),
                                   GENERIC_READ or GENERIC_WRITE,
                                   0, Nil, OPEN_EXISTING, 0, 0);
        if (FH <> INVALID_HANDLE_VALUE) then
        try
           Buff:=#27#112#49#50#250; // Zweiter Anschluss
           WriteFile(FH, Buff, 5, RetW, Nil);
        finally
           CloseHandle(FH);
        end;
      end else
      begin
        portwriteb( dm.SchubladeHWPort,dm.SchubladeAuf ); // Schublade am Rechner angeschlossen Strom ein man braucht zlportio (Torry?)
        Timerschublade.Enabled:=true; // Schaltet Strom wieder ab
      end;
    end else
      if dm.Schubladedirekt then // IBM-Kasse mit Steuerung Schublade über Comport (vacommx: Tcomport)
      begin
        if not (dm.displayport=dm.Schubladecomnr) then
        vacomm3.WriteStr(dm.Schubladecm) else
        vacomm2.WriteStr(dm.Schubladecmd);
      end else
      begin
        if (dm.Steuertextoption=2) or (dm.Steuertextoption=1) then
        begin
          switchprinter(dm.Steuertextdrucker);
          if fileexists(dm.steuertext) then
          begin
            redbeleg.lines.LoadFromFile(dm.steuertext); // RTF-Text mit Steuerzeichen, senden über Druckertreiber
            redbeleg.Print('');
          end else
          begin
            messagedlg(_('Schubladen - Steuertext konnte nicht gefunden werden'),mterror,[mbok],0);
          end;
        end;
      end;
Ralf
Gruß vom Niederrhein
  Mit Zitat antworten Zitat