Seite 1 von 1

Clipper und Laserdrucker

Verfasst: Fr, 04. Okt 2013 17:04
von sherlogg
Hallo, liebe Foren Mitglieder,

Clipper is still in use.

Ein Kunde von mir arbeitet seit 1988 mit einem von mir in Clipper programmierten ERP. Also, immer noch. Da es stabil läuft, muss ich ganz selten ran. Aber gerade ist es wieder mal soweit.

Die Ausdrucke der Rechnungen, Gutschriften, Lieferscheine, usw. erfolgt auf einem Laserdrucker (LJ-kompatibel) und funktioniert auch perfekt. In einiger Zeit steht ja bei den Banken die Umstellen auf den IBAN und BIC Zahlungsverkehr an. Jetzt möchte mein Kunde schon vorab, die entsprechenden Daten auf der Rechnung mit ausdrucken. Mein Idee war es, dass in einer Umrahmung zu machen. Aufgrund der Informationsfülle auf der Rechnung, arbeite ich beim Ausdruck mit einer relativ hohen Komprimierung (CHR(27)+"(s16.6H") um die Zeilenbreite optimal auszunutzen. Nun habe ich aber beim Ausdruck von Zeile zu Zeile immer einen winzigen Leerraum zwischen den Rahmenzeichen. Schalte ich die Komprimierung ab, sieht es perfekt aus. Komprimierung abschalten geht aber nicht, da ich nicht mal die Hälfte der benötigten Infos auf die Formulare bekomme.

Eventuell hat einer von euch das gleiche Problem gehabt und es gelöst. Ich sitze schon 2 Tage dran und sehe wahrscheinlich den Wald vor lauter Bäumen icht mehr. Hochstellen und Zeilen verschieben bringt nichts, weil links von dem Bereich der komplette Adressbereich der Rechnung ist.

Hier mal ein kleines Testprogramm, mit dem ich versuche dem Problem auf die Spur zu kommen:

Code: Alles auswählen

LOCAL nI,cESC1,cESC2,cESC3,cESC4,cESC5,cESC6

SET PRINT TO LPT1
SET CONSOLE OFF
SET PRINT ON

cESC1 := CHR(27)+"E"                // Initialisierung
cESC2 := CHR(27)+"(s0P"           // Proportionalschrift 0=Nein, 1=Ja
cESC3 := CHR(27)+"(s3T"	// Schriftart Courier
cESC4 := CHR(27)+"(s16.6H"      // Komprimierung
cESC5 := CHR(27)+"(s10V"         // 10 Pitch
cESC6 := CHR(27)+"*t300R"	// Zeichendichte
cESC7 := CHR(27)+"(s10H"        // Komprimierung auf Standard

?? cESC1
?? cESC2
?? cESC3
?? cESC4
?? cESC5
?? cESC6

? "Rahmen drucken"
?
?  CHR(218)+REPLICATE(CHR(196),52)+CHR(191)
?  CHR(179)+" "+REPLICATE("x",50)+" "+CHR(179)
?  CHR(179)+" "+REPLICATE("y",50)+" "+CHR(179)
?  CHR(179)+" "+REPLICATE("c",50)+" "+CHR(179)
?  CHR(192)+REPLICATE(CHR(196),52)+CHR(217)

?? cESC7        // Komprimierung auschalten
?
?  CHR(218)+REPLICATE(CHR(196),52)+CHR(191)
?  CHR(179)+" "+REPLICATE("x",50)+" "+CHR(179)
?  CHR(179)+" "+REPLICATE("y",50)+" "+CHR(179)
?  CHR(179)+" "+REPLICATE("c",50)+" "+CHR(179)
?  CHR(192)+REPLICATE(CHR(196),52)+CHR(217)

?? cESC1
EJECT

SET PRINT OFF
SET CONSOLE ON

Re: Clipper und Laserdrucker

Verfasst: Fr, 04. Okt 2013 17:24
von sherlogg
So sieht das dann aus ...

Re: Clipper und Laserdrucker

Verfasst: Fr, 04. Okt 2013 17:29
von brandelh
Ich vermute mal dass es ein PCL-Drucker ist oder ?

1. Möglichkeit wäre das "merken" der Eckparameter und das Drucken des Rahmens mit graphischen PCL-Befehlen (habe ich nie gemacht, aber ich meine sowas schon gesehen zu haben...).
2. Möglichkeit wäre die Zeilen doppelt zu drucken, einmal komprimiert nur den Text, danach entweder die Zeilen zurück, oder nur in der Zeile zurück und ohne Comprimierung die Boxzeichen.

Wichtig, dabei darf man aber nicht mit @ SAY drucken, da sonst ein Seitenvorschub ausgelöst wird wenn man kleinere Werte als zuvor übergibt.
Ein Laser baut immer erst die Seite auf bevor er druckt. Grundsätzlich kann man viele male die gleiche Zeile mit unterschiedlicher Schriftgröße drucken.

Re: Clipper und Laserdrucker

Verfasst: Fr, 04. Okt 2013 17:32
von Scarmo
Hallo Sherlogg

Ich denke, dies hängt mit dem entsprechenden Zeichensatz des Druckers zusammen. Das heisst, beispielsweise der vertikale Strich ist bei der 16 CPI-Schrift kürzer wie bei der 12er-Schrift. Ich denke jedoch, dass dies Modell-abhängig ist. Es kann deshalb sein, dass auf einem Drucker das Ganze klappt (ohne Zwischenraum) und auf einem anderen Modell gibt's eben diese Lücke.

Ich glaube jedoch kaum, dass Du dies (ohne den Zeilen-Abstand zu verringern) lösen kannst.

Grüsse
Marco

Re: Clipper und Laserdrucker

Verfasst: Fr, 04. Okt 2013 18:47
von sherlogg
brandelh hat geschrieben:Ich vermute mal dass es ein PCL-Drucker ist oder ?

1. Möglichkeit wäre das "merken" der Eckparameter und das Drucken des Rahmens mit graphischen PCL-Befehlen (habe ich nie gemacht, aber ich meine sowas schon gesehen zu haben...).
2. Möglichkeit wäre die Zeilen doppelt zu drucken, einmal komprimiert nur den Text, danach entweder die Zeilen zurück, oder nur in der Zeile zurück und ohne Comprimierung die Boxzeichen.

Wichtig, dabei darf man aber nicht mit @ SAY drucken, da sonst ein Seitenvorschub ausgelöst wird wenn man kleinere Werte als zuvor übergibt.
Ein Laser baut immer erst die Seite auf bevor er druckt. Grundsätzlich kann man viele male die gleiche Zeile mit unterschiedlicher Schriftgröße drucken.
Danke für die Antwort.

Jepp, ist ein PCL. Das mit dem doppelt drucken habe ich schon ausprobiert. Funktioniert leider nicht sauber. Was ich noch testen werde ich das Pixelgenaue ansteuern der Rahmenzeichen. Ist aber halt ein riesen Ding.

Gruß, Dieter

Re: Clipper und Laserdrucker

Verfasst: Fr, 04. Okt 2013 18:49
von sherlogg
Scarmo hat geschrieben:Hallo Sherlogg

Ich denke, dies hängt mit dem entsprechenden Zeichensatz des Druckers zusammen. Das heisst, beispielsweise der vertikale Strich ist bei der 16 CPI-Schrift kürzer wie bei der 12er-Schrift. Ich denke jedoch, dass dies Modell-abhängig ist. Es kann deshalb sein, dass auf einem Drucker das Ganze klappt (ohne Zwischenraum) und auf einem anderen Modell gibt's eben diese Lücke.

Ich glaube jedoch kaum, dass Du dies (ohne den Zeilen-Abstand zu verringern) lösen kannst.

Grüsse
Marco
Hallo Marco, danke für die Antwort.

Hmm, stimmt. Habe ich auch schon mal gesehen. Leider habe ich nur einen Lexmark zum testen. Leider sind die Drucker heutzutage, zumindest was Kompatibilität betrifft, nicht immer sehr zuverlässig.

Gruß, Dieter

Re: Clipper und Laserdrucker

Verfasst: Fr, 04. Okt 2013 20:29
von sherlogg
Hat mir keine Ruhe gelassen und ich habe die Lösung gefunden.

Beim Ausdruck kann in einer Zeile des Ausgabestring mit unterschiedlichen Positionierung gearbeitet werden.

Hier nochmal das Beispiel:

Die erste Box ist noch fehlerhaft und bei der Zweiten positioniere ich die Zeilen direkt Zeilen- und Spaltenbezogen und im zweiten Segment des Ausgabestring wird im Zeilenbereich grafisch positioniert. Ist jetzt nicht ganz so aufwändig, wie ich dachte.

Code: Alles auswählen

LOCAL nI,cESC1,cESC2,cESC3,cESC4,cESC5,cESC6,cESC7,cESC8

SET PRINT TO LPT1
SET CONSOLE OFF
SET PRINT ON

cESC1 := CHR(27)+"E"            // Initialisierung
cESC2 := CHR(27)+"(s0P"         // Proportionalschrift 0=Nein, 1=Ja
cESC3 := CHR(27)+"(s3T"		// Schriftart Courier
cESC4 := CHR(27)+"(s16.6H"      // Komprimierung
cESC5 := CHR(27)+"(s10V"        // 10 Pitch
cESC6 := CHR(27)+"(s10H"        // keine Komprimierung
cESC7 := CHR(27)+"*t300R"	// Zeichendichte
cESC8 := CHR(27)+"&l4C"        	// Vertikale Bewegung - default = 8

?? cESC1
?? cESC2
?? cESC3
?? cESC4
?? cESC5
// ?? cESC6
?? cESC7
// ?? cESC8

? "Rahmen drucken"
?
?
? CHR(218)+REPLICATE(CHR(196),52)+CHR(191)
? CHR(179)+" "+REPLICATE("v",50)+" "+CHR(179)
? CHR(179)+" "+REPLICATE("x",50)+" "+CHR(179)
? CHR(179)+" "+REPLICATE("y",50)+" "+CHR(179)
? CHR(179)+" "+REPLICATE("c",50)+" "+CHR(179)
? CHR(179)+" "+REPLICATE("v",50)+" "+CHR(179)
? CHR(192)+REPLICATE(CHR(196),52)+CHR(217)

? CHR(27)+"&a14R"+CHR(27)+"&a02C"+"Zeile 1"+CHR(27)+"*p0700Y"+CHR(27)+"&a20C"+CHR(218)+REPLICATE(CHR(196),52)+CHR(191)
? CHR(27)+"&a15R"+CHR(27)+"&a02C"+"Zeile 2"+CHR(27)+"*p0731Y"+CHR(27)+"&a20C"+CHR(179)+" "+REPLICATE("v",50)+" "+CHR(179)
? CHR(27)+"&a16R"+CHR(27)+"&a02C"+"Zeile 3"+CHR(27)+"*p0762Y"+CHR(27)+"&a20C"+CHR(179)+" "+REPLICATE("x",50)+" "+CHR(179)
? CHR(27)+"&a17R"+CHR(27)+"&a02C"+"Zeile 4"+CHR(27)+"*p0793Y"+CHR(27)+"&a20C"+CHR(179)+" "+REPLICATE("y",50)+" "+CHR(179)
? CHR(27)+"&a18R"+CHR(27)+"&a02C"+"Zeile 5"+CHR(27)+"*p0824Y"+CHR(27)+"&a20C"+CHR(179)+" "+REPLICATE("c",50)+" "+CHR(179)
? CHR(27)+"&a19R"+CHR(27)+"&a02C"+"Zeile 6"+CHR(27)+"*p0855Y"+CHR(27)+"&a20C"+CHR(179)+" "+REPLICATE("v",50)+" "+CHR(179)
? CHR(27)+"&a20R"+CHR(27)+"&a02C"+"Zeile 7"+CHR(27)+"*p0886Y"+CHR(27)+"&a20C"+CHR(192)+REPLICATE(CHR(196),52)+CHR(217)

?? cESC1
EJECT

SET PRINT OFF
SET CONSOLE ON
Rahmenx.jpg
Rahmenx.jpg (148.02 KiB) 6236 mal betrachtet

Re: Clipper und Laserdrucker

Verfasst: Sa, 05. Okt 2013 1:25
von brandelh
Zu meinen Clipper-Zeiten hatte ich eine Fehlerbehandlungsroutine, die
?? chr(13) an den Drucker gesandt hat, da - zumindest die damaligen Nadeldrucker - die Druckzeile nach einem Fehler häufig wiederholten und dafür musste der Druckkopf zurück.
Genauso müsste es auch bei deinem Laser funktionieren, wobei du es ja jetzt hinbekommen hast wenn ich das richtig lese. Ich meine das etwas so:

Code: Alles auswählen

?? cRandInBlank+cMiniSchriftEin+cText+MiniSchriftAus+chr(13)+cRandBisRahmen+cRahmen+chr(13)+chr(10)
Ohne Zweifel ist der Abschied dieser Druckersteuerung hin zu grafischem Druck eines der Highlights von Xbase++

Re: Clipper und Laserdrucker

Verfasst: Sa, 05. Okt 2013 12:23
von sherlogg
brandelh hat geschrieben:Zu meinen Clipper-Zeiten hatte ich eine Fehlerbehandlungsroutine, die
?? chr(13) an den Drucker gesandt hat, da - zumindest die damaligen Nadeldrucker - die Druckzeile nach einem Fehler häufig wiederholten und dafür musste der Druckkopf zurück.
Genauso müsste es auch bei deinem Laser funktionieren, wobei du es ja jetzt hinbekommen hast wenn ich das richtig lese. Ich meine das etwas so:

Code: Alles auswählen

?? cRandInBlank+cMiniSchriftEin+cText+MiniSchriftAus+chr(13)+cRandBisRahmen+cRahmen+chr(13)+chr(10)
Ohne Zweifel ist der Abschied dieser Druckersteuerung hin zu grafischem Druck eines der Highlights von Xbase++
Da hast Du wohl recht. Gott sei Dank bin ich nicht mehr allzu oft mit Änderungen in diesem Programm konfrontiert und der Zeitplan meines Kunden sieht einen Wechsel auf ein anderes ERP innerhalb der kommenden 2 Jahre vor. Das ist überschaubar.

Danke nochmal für die Antworten.
Gruß, Dieter

Re: Clipper und Laserdrucker

Verfasst: Sa, 05. Okt 2013 14:09
von AUGE_OHR
brandelh hat geschrieben:Ohne Zweifel ist der Abschied dieser Druckersteuerung hin zu grafischem Druck eines der Highlights von Xbase++
na ja ... wenn es nur ums drucken geht könnte man auch VOUCH http://www.vouchcac.com/vouch32/vouch32.htm verwenden.

Re: Clipper und Laserdrucker

Verfasst: Sa, 05. Okt 2013 14:19
von AUGE_OHR
sherlogg hat geschrieben:... und der Zeitplan meines Kunden sieht einen Wechsel auf ein anderes ERP innerhalb der kommenden 2 Jahre vor.
arbeitet dein Kunde noch mit Windows XP ?

gehe mal los und kaufe einen neuen PC ... da wirst du vermutlich nur 64bit Windows 8 als OS() bekommen womit Cl*pper (16-bit) nicht läuft.
Drucker die ESC Sequenzen ( Epson Modus ) verarbeiten werden auch immer weniger ... die billigen können nur GDI.

Re: Clipper und Laserdrucker

Verfasst: So, 06. Okt 2013 9:44
von brandelh
Mit DOSBOX laufen Clipper Programme auch unter Win 7 64-Bit, warum sollte das unter Win 8 anders sein ... oder eine virtual box ...

Re: Clipper und Laserdrucker

Verfasst: So, 06. Okt 2013 16:08
von AUGE_OHR
hi,

klar kann man Cl*pper mit DOSBOX betreiben ...aber auch damit "arbeiten" ?
mich stört dabei die Bildwiederholungsrate von 50Hz wo ich nach einigen Minuten Kopfschmerzen bekomme.

für VirtualBox benötigst du ein zusätzliches OS und VirtualPC gibt es (offiziell) nicht mehr für Windows 8 PRO.
auch in der latest vBox Version 4.2.18 funktioniert die "nahtlose" Bildschirm Skalierung nicht so wie ich mir das vorstelle.
zu Cl*pper Zeiten waren die Monitore im 4:3 Format bei 1024 x 768. wenn man aber 1920 x 1080 hat
und vBox mit 1024 x 768 läuft dann kann man die Zeichen kaum erkennen.

worum es mir nun geht : 2 Jahre sind nicht viel Zeit um eine umfangreiche ERP Application auf 32 / 64 bit umzustellen.
spätesten wenn der PC kaputt geht wird der Kunde vor einem Problem stehen denn wie ich schon sagte bekommt man keinen PC mehr mit BIOS und OS() < Win8.
nun kann man auch kein anderes ( Windows ) OS auf solchen PCs installieren denn Win8 hängt sich bei UEFI irgendwo ein :(

Re: Clipper und Laserdrucker

Verfasst: So, 06. Okt 2013 21:00
von Rolf Ramacher
also ich kann nur raten, sich von Clipper zu verabschieden und darauf keine Zeit mehr zu verschwenden. Anpacken umsetzen muß man es sowieso. Und die Kunden müssen das auch mal einsehen, das alte PRogramm auf neuen PC nicht mehr funktionsfähig sind.

Re: Clipper und Laserdrucker

Verfasst: Mo, 07. Okt 2013 1:11
von brandelh
sherlogg hat geschrieben:Gott sei Dank bin ich nicht mehr allzu oft mit Änderungen in diesem Programm konfrontiert und der Zeitplan meines Kunden sieht einen Wechsel auf ein anderes ERP innerhalb der kommenden 2 Jahre vor. Das ist überschaubar.
er hat doch geschrieben, dass das Programm durch ein anderes ersetzt werden soll ...

Re: Clipper und Laserdrucker

Verfasst: Do, 22. Feb 2018 18:12
von Ritchie39
Hallo Miteinander,
genauso wie man bereits Windows 7 als 32-Bit Version kaufen konnte, gibt es auch Windows 10 als 32-Bit Version. Und Clipper "is still going strong ..." (s. Johnny Walker) :wink:

Re: Clipper und Laserdrucker

Verfasst: Fr, 23. Feb 2018 8:28
von brandelh
es kommt halt auch drauf an was man damit macht ;-)

Wobei DOS unter Win64 geht nicht ?

NÖ das stimmt so nicht, nur M$ liefert es nicht !
Die DOSBOX hat bei mir selbst bei alten Spielen oft funktioniert, ein Clipper Programm läuft darunter immer.

Aber ehrlich gesagt möchte ich mich nicht mehr darauf beschränken müssen ;-)

Re: Clipper und Laserdrucker

Verfasst: Fr, 23. Feb 2018 9:14
von Rudolf
Hallo,
ich habe noch die ESC40 Lib, mit der kann man den Laserdrucker vernünftig ansteuern und Grafik wie Linien einfach darstellen, kann sie bei Bedarf abgeben.
Grüße
Rudolf