Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   ecape-sequenz zum drucker (https://www.delphipraxis.net/163637-ecape-sequenz-zum-drucker.html)

Neumann 8. Okt 2011 09:01

AW: ecape-sequenz zum drucker
 
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;

khh 8. Okt 2011 09:12

AW: ecape-sequenz zum drucker
 
alsooo

der logger hat mir die virtuelle com5 zerschossen
ich werd jetzt erst mal die Treiber neu installieren müssen :-(

khh 8. Okt 2011 09:13

AW: ecape-sequenz zum drucker
 
Zitat:

Zitat von Neumann (Beitrag 1129281)
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:

ich danke dir gewaltig

werd ich gleich mal ausprobieren

apropo schriftart

das mit der schriftart control hab ich auch gelesen, wo aber bekomme ich die her ?

khh 8. Okt 2011 09:23

AW: ecape-sequenz zum drucker
 
>> Weiter habe ich gesehen, dass der Kassenrechner selbst eine Schnittstelle für eine Kassenschublade hat. Warum nicht die verwenden?

du meinst die RJ11 schnittstelle

da hängt die Lade ja dran, aber wie spreche ich die direkt an ?

Sir Rufo 8. Okt 2011 09:32

AW: ecape-sequenz zum drucker
 
Eigentlich bietet der Hersteller da eine OPOS Schnittstelle an, schon mal da geschaut oder nachgefragt?

Neumann 8. Okt 2011 09:33

AW: ecape-sequenz zum drucker
 
Nachtrag: Die Procedure ist mit einer älteren Delphi-Version verendet worden. Ev. ist Anpassung an Unicode nötig.

Schrift Control stellt der Druckertreiber zur Verfügung.

Vorgehensweise (WIN XP, 7 noch nicht getestet:

Wordpad öffnen
Menue Datei - Drucken
Bondrucker auswählen
Übernehmen
Abbruch
Jetzt sollte die Schrift Control verfügbar sein, ebenso andere Druckeschriften, wie z.B. FontA11 bei Epson

Wenn mann den Befehl an den Drucker auf diese Weise schickt, "druckt" dieser ev. einen kleinen Streifen leeres Papier. Kann man meines Wissens nicht abstellen. Besser ist den Befehl t.B. im Bonkopf mitzuschicken.

Ist die Schublade am Drucker angeschlossen oder am Rechner selber?

Am Rechner: portwriteb( Port,Wert ); (zlportio) Werte für Port und Bitmaske sollte in der Doku des Rechners stehen

khh 8. Okt 2011 09:48

AW: ecape-sequenz zum drucker
 
Zitat:

Zitat von Neumann (Beitrag 1129289)
Nachtrag: Die Procedure ist mit einer älteren Delphi-Version verendet worden. Ev. ist Anpassung an Unicode nötig.

Schrift Control stellt der Druckertreiber zur Verfügung.

Vorgehensweise (WIN XP, 7 noch nicht getestet:

Wordpad öffnen
Menue Datei - Drucken
Bondrucker auswählen
Übernehmen
Abbruch
Jetzt sollte die Schrift Control verfügbar sein, ebenso andere Druckeschriften, wie z.B. FontA11 bei Epson

Wenn mann den Befehl an den Drucker auf diese Weise schickt, "druckt" dieser ev. einen kleinen Streifen leeres Papier. Kann man meines Wissens nicht abstellen. Besser ist den Befehl t.B. im Bonkopf mitzuschicken.

Ist die Schublade am Drucker angeschlossen oder am Rechner selber?

Am Rechner: portwriteb( Port,Wert ); (zlportio) Werte für Port und Bitmaske sollte in der Doku des Rechners stehen

ok das nit der schriftart probiere ich gleich mal aus, ist wohl der einfachste weg

khh 8. Okt 2011 12:49

AW: ecape-sequenz zum drucker
 
alsooo

lat EPSON Doku soll A bis E in FONT control die Lade öffnen.
Dabei unterscheiden sich die Buchstaben durch unterschiedlich lange Impulse
kleinbuchstagen sollen Lade 2 öffnen.

Ichhabe nun mal die diversen Grossbuchstaben an den Drucker geschicht.
aber ausser dem Ausdruck passiert nix

A ergibt dann XXp

aber die Lade geht nicht auf :-(

khh 8. Okt 2011 13:02

AW: ecape-sequenz zum drucker
 
Zitat:

Zitat von Sir Rufo (Beitrag 1129288)
Eigentlich bietet der Hersteller da eine OPOS Schnittstelle an, schon mal da geschaut oder nachgefragt?

die OPOS Cashdrawer Aplication öffnet die Lade,
aber wie spreche ich diese aus meiem Programm heraus an ?

Hansa 8. Okt 2011 13:19

AW: ecape-sequenz zum drucker
 
Trotz Beratungsresistenz :

Zitat:

weder auf 27 112 48 40 40 ( aus http://www.cashdrawer.com/support/faqs)

noch auf 27 112 0 100 100
Was steht in Beitrag #9 ? :evil:

Du versuchst immer noch, mit einer Luftnummer die Schublade aufzukriegen. Siehe das geschriebene zu t1/t2. Nachtrag zu m : 0 steht für "Drawer kick out Pin 2". Entsprechend steht 1 für Pin 5. Und t1/t2: "The pulse defined by t1 and t2 is output on connector pin m". Entsprechende esc-Sequenz steht auch bereits in #9.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 Uhr.
Seite 3 von 5     123 45      

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