Textanzeige mit GraStringAt()

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Textanzeige mit GraStringAt()

Beitrag von JanR »

Hallo,

ich habe eine Spalte mit GraStringAt() aufgebaut, in denen Zahlen angezeigt werden. Die Länge ist immer gleich, da ich am Anfang immer Leerstellen einbaue, damit jede Zeile gleich lang ist. Wenn ich die Schriftart "Arial" verwende, wird nicht alles gleichmässig untereinander dargstellt sondern, versetzt. Verwende ich jedoch Courier New wird alles korrekt untereinander dargestellt. Geht das auch irgendwie mit Arial?
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Jan,

mit Arial geht das normalerweise deswegen nicht, weil das im Gegensatz zu Courier eine Poportionalschrift ist.

Umgehen lässt sich das, wenn Du am Anfang nicht Leerzeichen sondern Tabs einbaust. Deren Länge ist immer gleich.

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

Beitrag von brandelh »

Hallo,

du kannst den Text auch rechtsbündig ausrichten, indem du die Länge ermittelst und den Anfangspunkt berechnest. In meiner Druckklasse habe ich so zentrieren, rechtsbündig und Blocksatz (Printtext bzw. printmemo) eingebunden. Die Längenberechnung ist bei einem Fenster gleich.

PS: weil Arial unterschiedliche Zeichenbreiten nutzt, sieht es ja viel schöner aus als Curier ;-)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Textanzeige mit GraStringAt()

Beitrag von AUGE_OHR »

hi,
JanR hat geschrieben: ich habe eine Spalte mit GraStringAt() aufgebaut, in denen Zahlen angezeigt werden. Die Länge ist immer gleich, da ich am Anfang immer Leerstellen einbaue, damit jede Zeile gleich lang ist. Wenn ich die Schriftart "Arial" verwende, wird nicht alles gleichmässig untereinander dargstellt sondern, versetzt. Verwende ich jedoch Courier New wird alles korrekt untereinander dargestellt. Geht das auch irgendwie mit Arial?
du musst den "String" rechts ausrichten :

Code: Alles auswählen

aAttr[GRA_AS_HORIZALIGN] := GRA_HALIGN_RIGHT // rechts bündig
graSetAttrString(oPrinter, aAttr)

GraStringAt( oPrinter, {nX,nY}, myText  )   // jetzt rechts 

aAttr[GRA_AS_HORIZALIGN] := GRA_HALIGN_LEFT // links bündig
graSetAttrString(oPrinter, aAttr)

GraStringAt( oPrinter, {nX,nY}, myText  )   // jetzt links
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15696
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Textanzeige mit GraStringAt()

Beitrag von brandelh »

AUGE_OHR hat geschrieben:...
du musst den "String" rechts ausrichten :

Code: Alles auswählen

aAttr[GRA_AS_HORIZALIGN] := GRA_HALIGN_RIGHT // rechts bündig
graSetAttrString(oPrinter, aAttr)
daran hatte ich noch gar nicht gedacht, ist natürlich einfacher :)
Gruß
Hubert
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Beitrag von JanR »

Hallo,

danke für eure Hilfe.

Wenn ich den String rechts ausrichten möchte und vorher GraSetAttrArea() verwende, erhalte ich einen Fehler

"oError:args :
-> VALTYPE: N VALUE: 2
oError:canDefault : N
oError:canRetry : N
oError:canSubstitute: N
oError:cargo : NIL
oError:description : Error in array index
oError:filename :
oError:genCode : 4
oError:operation : <[9]>:=<2>
oError:osCode : 0
oError:severity : 2
oError:subCode : 1012
oError:subSystem : BASE
oError:thread : 1
oError:tries : 0"

Code:

Code: Alles auswählen

      aAttrA := Array(GRA_AS_COUNT)

      aAttr [GRA_AS_HORIZALIGN] := GRA_HALIGN_RIGHT

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

Beitrag von brandelh »

JanR hat geschrieben:Hallo,
Wenn ich den String rechts ausrichten möchte und vorher GraSetAttrArea() verwende, erhalte ich einen Fehler
...Code:

Code: Alles auswählen

      aAttrA := Array(GRA_AS_COUNT)
      aAttr [GRA_AS_HORIZALIGN] := GRA_HALIGN_RIGHT
      GraSetAttrArea(oPS, aAttrA)
in deinem Codebeispiel schreibst du aAttrA und aAttr ist das nur hier ein Tippfehler oder steht das auch im Code ?
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Beitrag von AUGE_OHR »

moin,
JanR hat geschrieben:

Code: Alles auswählen

 aAttrA := Array(GRA_AS_COUNT)
 aAttr [GRA_AS_HORIZALIGN] := GRA_HALIGN_RIGHT
 GraSetAttrArea(oPS, aAttrA)
ich würde sagen ein Syntax Fehler :

Code: Alles auswählen

 aAttr [GRA_AS_HORIZALIGN] := GRA_HALIGN_RIGHT

müsste

 aAttrA [GRA_AS_HORIZALIGN] := GRA_HALIGN_RIGHT
sein.

gruss by OHR
Jimmy
JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

Beitrag von JanR »

Hallo Hubert,

das war nur ein Tippfehler. Habe den Fehler gefunden. Habe die Funktion "GraSetAttrArea()" verwendet. Aber für die Ausrichtung der Strings muss ich ja logischerweise die Funktion "GraSetAttrString()" verwenden. :).
Antworten