AGB  ·  Datenschutz  ·  Impressum  







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

ecape-sequenz zum drucker

Ein Thema von khh · begonnen am 7. Okt 2011 · letzter Beitrag vom 22. Okt 2011
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#1

ecape-sequenz zum drucker

  Alt 7. Okt 2011, 19:32
hallo zusammen,
ich möchte aus lazarus heraus die esc-seq. zum Öffnen der Kassenschublade an den Drucker schicken.

mit:
Code:
stream := tfilestream.create(printerport,fmOpenWrite);
stream.Write(pchar(myText)^,length(myText));
schicke ich "normalen" Text (in mytext)zum Drucker, der dort auch brav gedruckt wird

wie aber bekomme ich die esc-seq zum Drucker.
lt Manual soll folgende Sequenz geschickt werden:

Die ESC-Sequenzen "Geldlade öffnen"
1) Schubladen Öffnung: ESC p m t1 t2;
z. B. Chr(&H1B) + "p" + Chr(&H0) + Chr(&H64) + Chr(&H64)

Aus QBASIC heraus:
PRINT#1,CHR$(27);CHR$(112);CHR$(0);CHR$(50);CHR$(1 50);




wie funkt das in pascal?


ichdanke euch gewaltig für eure Ideen.


Gruss KHH
Karl-Heinz
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

AW: ecape-sequenz zum drucker

  Alt 7. Okt 2011, 20:00
Vorab 1), z.B., QBASIC das passt hinten und vorne nicht zusammen.

allgemein würde das so gehen :


Delphi-Quellcode:
var t : Textfile;

begin
  AssignFile (t,'LPT1');
  rewrite (t);
  write (t,chr (27)+ richtige ESC-Sequenz);
  close (t);
Gruß
Hansa
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#3

AW: ecape-sequenz zum drucker

  Alt 7. Okt 2011, 21:24
mh, ich danke dir, aber das funktioniert wohl nicht mit ner seriellen Schnittstelle
Karl-Heinz
  Mit Zitat antworten Zitat
Gargoyl

Registriert seit: 11. Mär 2007
69 Beiträge
 
#4

AW: ecape-sequenz zum drucker

  Alt 7. Okt 2011, 21:30
Dann ersetzt doch einfach AssignFile (t,'LPT1'); durch AssignFile (t,'COM1'); oder statt COM1 den seriellen Port, den du benutzt.
  Mit Zitat antworten Zitat
omata

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

AW: ecape-sequenz zum drucker

  Alt 7. Okt 2011, 21:31
Also wenn schon AsignFile dann auch CloseFile.

Delphi-Quellcode:
var t : Textfile;
begin
  try
    AssignFile(t, 'LPT1');
    Rewrite(t);
    Write(t, chr(27) + richtige ESC-Sequenz);
  finally
    CloseFile(t);
  end;
end;
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#6

AW: ecape-sequenz zum drucker

  Alt 7. Okt 2011, 21:42
Dann ersetzt doch einfach AssignFile (t,'LPT1'); durch AssignFile (t,'COM1'); oder statt COM1 den seriellen Port, den du benutzt.
hab ich ja gemacht,
aber es kommt nix beim drucker an

wie wird denn
Write(t, chr(27) + richtige ESC-Sequenz);
für die genannten seqenzen definiert?

danke gruss KH
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#7

AW: ecape-sequenz zum drucker

  Alt 8. Okt 2011, 00:18
wie wird denn
Write(t, chr(27) + richtige ESC-Sequenz);
für die genannten seqenzen definiert?
Sowas sollte man aber auch selber übersetzen können. (steht sogar alles Nötige in der OH und ganz am anfang eines ordentlichen Tutorials)

Zitat:
Chr(&H1B)
- das & ignorieren wir einfach
- H = Hexadezimal (und wie gibt man das in Delphi an?)
- genau, mit einem $, also $1B
- und statt über CHR kann man es auch direkt als CHAR-Konstante deklarieren, oder man läßt es so

Chr(&H1B) = Chr($1B) = #$1B

- und das " in Pascal ein ' sein soll, braucht man keinem zu sagen, oder?

"p" = 'p' = #$70 = #112 = CHR(112)

PS: #27 = #$1B = Escape

Zitat:
Delphi-Quellcode:
z. B. Chr(&H1B) + "p" + Chr(&H0) + Chr(&H64) + Chr(&H64)

Aus QBASIC heraus:
PRINT#1,CHR$(27);CHR$(112);CHR$(0);CHR$(50);CHR$(1 50);
Eines von Beiden kann nicht stimmen, denn $64 <> 50 bzw. 150.
$64 (Hexadezimal) = 100 (Dezimal)

#27'p'#0#100#100 (laut dem ersten Code)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

AW: ecape-sequenz zum drucker

  Alt 8. Okt 2011, 01:32
Ich glaube das Thema wird "etwas" unterschätzt. Siehe das :

Dann ersetzt doch einfach AssignFile (t,'LPT1'); durch AssignFile (t,'COM1'); oder statt COM1 den seriellen Port, den du benutzt.
Damit ist es leider nicht getan. Einfach LPT1 durch COM1 ersetzen und gut ist ? Ne. Ich sage nur mal : Baudrate. Das Betriebssystem muss auf gewisse serielle Parameter eingestellt werden und das eigene Programm muss diese GENAU nutzen. Sonst geht nichts. Jetzt wäre interessant zu wissen, warum denn der Drucker manchmal druckt. Bezüglich der Kassenschublade : wo ist das Kabel her ? Vielleicht selber gelötet ? Belegung falsch ? Dann kann man noch 1000 Jahre programmieren und es geht immer noch nichts.

@roter Kasten : schön, dass du da bist. Kein einziger Beitrag ist zu sehen. Nur das was momentan noch editiert wird.
Gruß
Hansa

Geändert von Hansa ( 8. Okt 2011 um 01:52 Uhr)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

AW: ecape-sequenz zum drucker

  Alt 8. Okt 2011, 02:39
Himitsu hat ja den Hex-Kram quasi übersetzt. Was für solche Fälle immer nützlich ist, das ist das : www.asciitable.com

Na gut, da Ami mich warten lässt, und die Glaskugel heute neu poliert wurde noch hierzu was :

1) Schubladen Öffnung: ESC p m t1 t2

Diese Sequenz kommt mir sowieso bekannt vor. ESC ist klar, p könnte für "pay" stehen, also Kasse öffnen. Was soll das m ? Zunächst mal t1 und t2 (auch klar). Die zwei Zahlen stehen für ein Zeitintervall. Dieses bestimmt, wie lange der Schubladenstrom fliesst, damit der Öffnungsmechanismus das Ding aufmachen kann. Wenn ich mich recht entsinne ist in der ESC-Sequenz noch eine Schubladennummer vorgesehen. Das kann nur das m sein.

Also hätten wie z.B. so etwas :

write (t,chr(27)+'p'+chr(0)+chr(0)+chr(150)); Das wäre eine gültige ESC-Sequenz für die Schublade. Hinter 'p' steht die erste #0 für erste Schublade, weil vermutlich nur eine da ist. t1 steht auf 0, t2 auf 150, d.h. der Schubladenstrom fliesst für 150 ms. Gewähr wird sowieso keine übernommen, aber wenn das so richtig ist, dann geht das Teil auf. Ansonsten die 150 erhöhen. Kommt kein "Klack", dann ist Kabel falsch, Drucker aus oder die serielle Verbindung ist falsch eingestellt.

Sieht jetzt so aus, als bräuchte man den m und t1 Wert nicht, aber t1 ist sicherheitshalber und 2 Schubladen braucht man schon in Grenzgebieten, selbst im EUR-Zeitalter. Vielleicht gibts ja bald sogar wieder Engpass an Kassenschubladen.
Gruß
Hansa

Geändert von Hansa ( 8. Okt 2011 um 02:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#10

AW: ecape-sequenz zum drucker

  Alt 8. Okt 2011, 06:47
Was ist es denn für eine Kasse ? Eine Bezeichnung wäre hilfreich und wie ist diese angeschlossen ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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 08:06 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