Spalten nicht bündig, weil Druckzeichen verrutscht

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

AUGE_OHR hat geschrieben:hi,
brandelh hat geschrieben: erkläre doch mal genauer was du unter 'eigenen Tabulatoren' meinst.
eigendlich meine ich damit nur die verwendung einer variabel oder so
für die Positionen in der x-Achse. Dies gilt ja im Prinzip so auch schon
bei Cl*pper das man bei "formatierungen" (=TAB) besser den String
zerlegt und einzeln auf den Positionen ausdruckt.

Der Rest ist mehr für "Snoop_Proggy_Prog"

Code: Alles auswählen

statt :
   @line, 0 SAY a+" "+b+" "+c

besser :
#define TAB1 20 
#define TAB1 40 
#define TAB1 50 
//
// line  = Y Achse
// TAB = X Achse
//
   @line, TAB1 SAY a
   @line, TAB2 SAY b
   @line, TAB3 SAY c
Hallo Jimmy,

genau das ist nicht richtig. @x,y ... macht nix anderes als Zeichen zählen. Spätestens wenn man dann Steuerzeichen eingestreut hat (Fett etc.) ging das fürchterlich in die Hose. Nur wenn man mit

? T1+cFett_1+t2+cFett_0 (die Druckersteuerzeichen habe ich in Vars geführt.)

gedruckt hat, konnte man das einigermaßen hinbekommen.

Ein XbpPrinter hingegen druckt genau auf eine 1/10 mm (in deutsch) Position allerdings in der Basislinie links. Von dem Presentationspace sollte man sich nicht verwirren lassen, ist nix weiter als eine Variable der man die gewünschten Maße spendiert hat. Wie eine Art von Zeichenvorlage (Zeichenbrett) auf dem man das gewünschte Bild zeichnet ohne sich Gedanken zu machen ob nachher einer mit der Handsäge oder einer CNC das Endergebnis aus der Vorlage erzeugt ;-)

@Snoop_Proggy_Prog,

Sieh dir die Beispiele oben an. Egal ob mit Xbase direkt (0,0 links unten und leider nicht auf dem RAND) oder mit meiner Klasse ist das weder schwer noch ein Buch mit 7 Siegeln.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
brandelh hat geschrieben: Spätestens wenn man dann Steuerzeichen eingestreut hat (Fett etc.)
ging das fürchterlich in die Hose. Nur wenn man mit
? T1+cFett_1+t2+cFett_0 (die Druckersteuerzeichen habe ich in Vars
geführt.)
gedruckt hat, konnte man das einigermaßen hinbekommen.
es ist richtig das ESC Sequencen nur per "?" am drucker ankamen, aber
was spricht dagegeb das man auch das getrennt hatte ?

Code: Alles auswählen

PROCEDURE D_ESC(cName)
      SET CONSOLE OFF
      SET PRINTER ON

      DO CASE
            CASE cName = "RESET" 
                     * ? D_RESET
                     * D_CPI10 := CHR(27) + CHR(80)
                     ? D_CPI10
            CASE cName = "FETT_ON"
                     * BREIT ON
                      ? CHR(28) + CHR(69) + CHR(49)
                          
            CASE cName = "FETT_OFF"
                      * BREIT OFF
                      ? CHR(28) + CHR(69) + CHR(48)

            CASE cName = "CPI10"
                     ? D_CPI10
...

      ENDCASE

      SET PRINTER OFF
      SET DEVICE TO PRINT
RETURN

D_ESC("RESET")
D_ESC("CPI18")
D_ESC("FETT_ON")

@ x,y SAY "Hallo world"

D_ESC("FETT_OFF")
D_ESC("CPI10")
die ESC Sequencen hab ich nur hier im Demo eingefügt, dafür gibt es eine
DBF mit über 360 Druckern. (wenn jemand die braucht bitte ein PM)

aber auch da ist das Prinzip dem von Xbase++ in GUI dann ähnlich, muss
man ja auch da die Attribute / Fonts vor dem GraStringAt() einzeln setzten

gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

AUGE_OHR hat geschrieben:hi,
es ist richtig das ESC Sequencen nur per "?" am drucker ankamen, aber
was spricht dagegeb das man auch das getrennt hatte ?

... DBF mit über 360 Druckern. (wenn jemand die braucht bitte ein PM)
wenn es funktioniert hat, war das zu Clipperzeiten möglich, aber immer fixed font. Wer möchte das heute wirklich noch so machen und vor allem seinen Kunden erklären, warum Arial 10 oder 8 Punkt als Schrift nicht geht ?
Es ist schlicht weg umständlicher wenn man beim Drucken immer alles genau in der passenden Reihenfolge drucken muss. PCL Drucker waren eventuell eine Ausnahme.

Ein Problem ist dabei bei Nadeldruckern immer auftreten!
Wenn der Nadeldrucker nicht nachkam und ein Timeout Clipperfehler durch einen neuen Versuch ersetzt wurde war die Formatierung dieser Zeile dahin. Ich habe daher bei meiner Druckausgabe immer jede Zeile per ? cTxt gedruckt und im Fehlerfalle in der ErrorSys ? chr(13) eingefügt. So waren nur einige Textteile doppelt gedruckt ;-)

Aber das ist vorbei, wer hat schon noch Nadeldrucker.

Ganz so vollständig ist meine Steuerzeichen DBF nicht, ich hatte etwas um 30 Drucker drin.
aber auch da ist das Prinzip dem von Xbase++ in GUI dann ähnlich, muss
man ja auch da die Attribute / Fonts vor dem GraStringAt() einzeln setzten
Einzeln setzen stimmt im Prinzip, wenn man von oben nach unten durchdruckt ... (wobei meine Klasse dies beim Ausrichten abnimmt), aber das muss man nicht machen. Mann kann auch erst alle Arial drucken, dann alle Times ... ganz frei wie man will. Ob das immer Sinn macht ist fraglich, aber speziell bei Besonderheiten (Logos, gedrehte Schriften etc.) geht es gar nicht anders.

Ich bleibe dabei, die Zeit für @x,y ... oder ? drucken ist vorbei :D
Gruß
Hubert
Snoop_Proggy_Prog
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 01. Aug 2007 15:53
Wohnort: Bärlin

Vielen Dank für die tollen Tipps

Beitrag von Snoop_Proggy_Prog »

Super Forum, nette Leute, Top ! :)
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 393
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Armin »

hallo spp :roll:,

ne, da hast du mich leider nicht verstanden.

>> ich drucke zuerst alle Listen in Dateien. Diese drucke ich mittels
>> xbpPrinter... an den Windowsdrucker. Hierzu verwende ich meistens erst
>> mal einen fixen-Font - meist Lucida-Console.

damit meine ich, ich drucke weiterhin mit say, bzw ? usw. und leite den Druck in eine Datei um (das ist ja wohl klar, wie das geht).

Erst hier drucke ich dann die Datei an den entsprechenden Drucker.

Gruss, Armin
Snoop_Proggy_Prog
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 28
Registriert: Mi, 01. Aug 2007 15:53
Wohnort: Bärlin

Wie stellt man den PresSpace bei Listendruck ?

Beitrag von Snoop_Proggy_Prog »

Es doch Unterschiede bei Display und File Ausgabe ?
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Koverhage »

Hubert,

es gibt noch viele Firmen (ca 90% unserer Kunden) mit Nadeldrucker.
Von vorbei sein kann man also nicht reden.
P. Jossi
Cut&Paste-Entwickler
Cut&Paste-Entwickler
Beiträge: 31
Registriert: Mi, 17. Mai 2006 7:16

jedes Zeichen Positionieren

Beitrag von P. Jossi »

wenn es nur darum geht zB Ziffern in Rechnungen die mit einem Proprtional- font geschrieben sind ordentlich zu präsentieren positioniere ich
jede Ziffer separat mit grastringat()

cZiffrer=str(wert,10)
for i=1 to len(cZiffer)
grastringat(ops,{900+1*15,400},substr(cZiffer,i,1)
next

Peter
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 393
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Armin »

Hallo SPP,

ich bin glaub ich noch eine Antwort schuldig (ich war im Urlaub). Hast du noch eine spezielle Frage dazu oder hat es sich mittlerweile erledigt?

Grüsse, Armin
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hallo Peter,

Hinweis zum Befehl GraStringAt (). Damit es aber alle Zahlen, bzw. Buchstaben gleich lang sind, mußt du dann eine entsprechende Schriftart
mit XbpFont anlegen und anschließend mit GraSetFont() setzen
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo,

also Ziffern sind meines Wissens alle immer gleich lang.

Würde deren Breit mit der von Blanks übereinstimmen hätte man es leichter, aber dem ist nicht so. Man kann auch die tatsächlich nötige Breite eines Strings abfragen, allerdings gibt GraQueryTextBox() ein Array mit 5 Elementen zurück. Bei nicht kursiver Schrift müsste es reichen den Wert von nXright - nXleft zu berechnen. Wenn man die Breite von einem gegebenen Punkt abzieht und auf das Ergebnis dann druckt, erhält man auch eine rechte Ausrichtung. So baue ich in meiner Druckerklasse schon immer Blocksatz und rechte Ausrichtung auf.

Mittlerweile könnte man diese aber auch mit dem GraSetAttrString() - Ausrichtung auf GRA_AS_HORIZALIGN = GRA_HALIGN_RIGHT erreichen.
Gruß
Hubert
Antworten