Fettdruck einer nichtproportionalen Schrift? [ERLEDIGT]

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

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Fettdruck einer nichtproportionalen Schrift? [ERLEDIGT]

Beitrag von Wolfgang_B »

Hallo Kollegen,

bräuchte mal eine Nachhilfe für das Drucken mit verschiedenen Fonts.
In meiner Anwendung kommt es z.B. bei Rechnungsdruck vor, daß die Beträge untereinander stehen müssen. Nach meiner Logik kann das nur mit Nicht-Proportionalschriften funktionieren. Das wäre die erste Frage. Ist das so? Oder kann man auch mit irgendwelchen Tricks das mit Prop.Schriften hinkriegen?

Nach dem ich mir jetzt ersatzweise eine Schrift :-- > FONT_DEFFIXED_LARGE aus der Doku rausgesucht habe, klappt das auch gut mit den untereinandergeschriebenen Beträgen. Nur ist diese Schrift extrem blass. Keine Ahnung warum. Gibt es was daß diese Schrift fett gedruckt wird? Ich habe schon alles mögliche ausprobiert, aber am Schriftbild ändert sich nichts. Generell ist mir aufgefallen, daß Nicht-Prop. Schriften blasser gedruckt werden als Prop.schriften. Stimmt das?

Im Programm verwende ich für die Zuweisung der verschiedenen Fonts folgenden Quellcode:

aSettings := { FONT_TIMES_SMALL ,FONT_TIMES_MEDIUM, FONT_TIMES_LARGE , FONT_TIMES_XLARGE + FONT_STYLE_BOLD ,FONT_TIMES_XLARGE + FONT_STYLE_ITALIC + FONT_STYLE_BOLD, FONT_COURIER_SMALL, FONT_DEFFIXED_LARGE + FONT_STYLE_BOLD }

oFont77:= xbpFont():new(oPS) // FONT_DEFFIXED_LARGE + FONT_STYLE_BOLD
oFont77:create(aSettings[7])
oFont77:nominalPointSize:= 12

Danke für Tipps.

Gruß Wolfgang
Zuletzt geändert von Wolfgang_B am Di, 28. Feb 2012 11:36, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von Jan »

Hallo Wolfgang,

selbstverständlich kannst Du das auch mit Nichtproportionalschriften machen. Dann mußt Du nur bei jedem Eintrag die Position der Spalte mit angeben.

Abgesehen davon kannst Du auch Proportionalschriften fett drucken. Ich muß aber gestehen, das ich die immer namentlich eintrage, also z. B. Courier.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von brandelh »

Hi,

eine nichtproportionale Schrift (Courier New) müsste zwar gehen, aber willst du das haben ?
Du musst im Prinzip jede Spalte getrennt drucken, Zahlen rechtsbündig, dann kannst du wählen was du willst.

Mit meiner Druckerklasse geht das sogar ganz einfach ;-)

Code: Alles auswählen

:PrintText(nPosX, nPosY, nBetrag , "R")   // direkt die Zahl, meist will man aber fixe Formate - "R" für rechtsbündig
:PrintText(nPosX, nPosY, Transform(nBetrag,"9,999.99") , "R")   // also selbst in String umwandeln.
1 mm dahinter dann ...
:PrintText(nPosX+10, nPosY, "EUR ..." )   // der nächste Text dann wieder LINKS-bündig
wenn du selbst bauen willst, schau dir mal in der Hilfe GraSetAttrString( [<oPS>], [<aAttributes>] ) --> aOldAttributes
dort speziell ...

Code: Alles auswählen

GRA_AS_HORIZALIGN   GRA_HALIGN_*        GRA_HALIGN_LEFT       
Bei den Schriften ist es leider nicht so einfach, je nach Sprache und installiertem Font sehen die recht unterschiedlich aus.
Wenn die Bezeichnung nicht genau stimmt, wählt Xbase++ (oder Windows) einen "ähnlichen" ... was SEHR unähnlich enden kann.
Mit Arial und den Standardfonts ist man auf der sicheren Seite, ansonsten per Fontauswahldialog auswählen lassen (und Name speichern)
oder ein Fontobjekt nutzen, die Merkmale setzen und dann erstellen, einmal mit BOLD := .f. und einmal mit .t..

Fontobjekte sollte man übrigens einmal erstellen und danach nur noch verwenden, am Programmende müssen diese destroyed()
und mit NIL überschrieben werden, sonst könnte es Probleme mit dem Freigeben des Speichers geben.
Gruß
Hubert
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von Wolfgang_B »

Hallo Jan, hallo Hubert,

herzlichen Dank für die Tipps. Leider bin ich der Lösung meines Problems noch nicht näher gekommen. Ich muß zugeben, daß ich mit "Klassen" noch nicht viel anfangen kann, ganz zu schweigen davon selber welche zu definieren. Ich habe mich wahrscheinlich bei meiner Frage auch seltsam ausgedrückt.
Bei z.B. Rechnungen verwende ich den Font für Beträge:

aSettings := { FONT_TIMES_SMALL, FONT_TIMES_MEDIUM, FONT_TIMES_LARGE, FONT_TIMES_XLARGE + FONT_STYLE_BOLD, FONT_TIMES_XLARGE + FONT_STYLE_ITALIC + FONT_STYLE_BOLD, FONT_COURIER_SMALL }

oFont3 := xbpFont():new(oPrinterPS) // Font_Times Medium
oFont3:create(aSettings[2])

Hier sind die Beträge nicht rechstbündig, d.h. das Komma ist nicht untereinander, sondern je Länge unterschiedlich positioniert, obwohl ich die Ausgabe vorher mit TRANSFORM() formatiere und die Position in jeder Zeile gleich setze. Wenn ich FONT_COURIER_SMALL verwende, klappts richtig. Komma und Zahlen sind dann genau übereinander. Deshalb meine Ausdrucksweise porportional/nichtproportional Schrift.

Nächste Frage. Wie kann ich unterstreichen? Ich habe die im Manual bei xbpFont () die Instanzvariable :underscore gefunden. Selbst wenn ich die auf .T. setze ändert sich nichts. Muß man da einen besonderen Font verwenden?

Paßt zwar nicht in den Thread, aber wie kann ich die Bezeichnung einen Pushbuttons farbig darstellen? ODer weiter: wie kann ich einzelne Werte einer Listbox farblich darstellen, z.B. bei negativen Beträgen.

Ich hoffe ich nerve nicht :wink:

Gruß Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von Martin Altmann »

Moin Wolfgang,
wenn Du eine nicht-Proportionale Schrift hast und untereinander stehende Zahlen am Komma zueinander ausrichten willst, musst Du diese Zahlen jeweils aufteilen - der linke Teil bis einschließlich zu dem Komma und die Nachkommastellen.
Dann druckst Du den linken Teil rechtsbündig zu Deiner Koordinate, an der das Komma stehen soll und den rechten Teil linksbündig zu der selben Stelle (ggf. musst Du zu der Position dann noch ein wenig addieren, damit die Zeichen sich nicht überlagern bzw. das ganze besser aussieht).
Thema unterstreichen: Wenn Du das Font-Objekt bereits create()et hast und dann unterstreichen willst, musst Du jeweils nach dem Setzen von :underscore ein :configure auf den Font machen:

Code: Alles auswählen

oFontnorm    := XbpFont():new( ::oPresSpace )
oFontnorm:FamilyName := "Arial"
oFontnorm:nominalPointSize := 10
oFontnorm:generic := .t.
oFontnorm:create()
...
oFontnorm:underscore := .t.
oFontnorm:configure()
GraStringAt( oPS, { 700, nY }, text )
oFontnorm:underscore := .f.
oFontnorm:configure()
Das gilt i.A. immer, wenn Du von einem bereits :create()eten Font-Objekt die Eigenschaften (Fett, Kursiv, Unterstrichen) ändern willst.
Um Die Farbe einzelner Listboxeinträge farbig darstellen zu können, musst Du Ownerdrawing verwenden! Das wird auch für die :caption eines Pushbuttons gelten! Suche mal nach diesem Begriff hier im Forum, da wirst Du einiges zu finden.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von brandelh »

Martin Altmann hat geschrieben:Moin Wolfgang,
wenn Du eine nicht-Proportionale Schrift hast und untereinander stehende Zahlen am Komma zueinander ausrichten willst, musst Du diese Zahlen jeweils aufteilen - der linke Teil bis einschließlich zu dem Komma und die Nachkommastellen.
Nein, das ist nicht sinnvoll, solange die Anzahl der Nachkommastellen gleich ist !
Ziffern sind immer gleich breit, auch bei proportionalen Schriften.
Ein rechtsbündig gedrucktes Transform(nWert,"999,999,999.99") wird die Komma schön untereinander haben, egal welcher Font.
Unterstreichen mit "underscore" setzt eine änderung des Fonts voraus, und wird - falls es überhaupt funktioniert - immer Wortweise unterschreichen.
Wer will das schon. GraLine() kann das besser, einfach einen mm unter der normalen Stringausgabe ...

ODER meine Druckklasse BENUTZEN, du nutzt ja auch @ GET oder XbParts ... oder ?
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von Martin Altmann »

Hubert,
stimmt - die Zahlen sind tatsächlich gleich breit. Dann ist es in der Tat einfacher!
Aber falsch ist Deine Aussage, dass underscore nur die einzelnen Wörter unterstreichen würde!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von Martin Altmann »

Moin,
habe es gerade noch Mal verifiziert - underscore funzt nicht mehr! Zumindest nicht so, wie von mir beschrieben (und so ging es mal - zumindest noch vor der aktuellen Version von Xbase++!)

Muss ich mal untersuchen.

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von brandelh »

Hallo Martin,

ich habe mich lange mit Drucken beschäftigt ;-) underscore könnte bei der einen oder anderen Schrift funktionieren,
aber spätestens wenn man Blockschrift möchte, muss man sich selbst um die Linien kümmern.
Wenn ich mich recht erinnere hat auch nicht jede Schrift underscore unterstützt, aber es ist lange her dass ich das probiert habe.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16502
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von Martin Altmann »

Moin,
ne - keine Sorge, funzt! Man muss nur nach dem :configure() auf das Font-Objekt den Font erneut für den PresSpace setzen:

Code: Alles auswählen

oFontnorm:underscore := .t.
oFontnorm:configure()
GraSetFont( oPS, oFontnorm )
- sonst schlägt die Änderung natürlich nicht durch!
Bei einem Blocksatz (den man ja selbst durch vergrößern der Abstände zwischen den Worten provoziert), muss man die Linie natürlich selber setzen (es sei denn, man will nur ein Wort unterstreichen und positioniert das selber an die gewünschte Stelle)!

Viele Grüße,
Martin
:grommit:
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/

Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von Wolfgang_B »

Hallo,
gerade ist mir meine mühsam erstellte Antwort wieder wegen Rechnerabsturz über den Jordan gegangen ...

Also nochmal.

Unterstreichen klappt so wie Martin beschrieben!! Danke Martin

Ich kämpfe immer noch mit der Positionierung der Beträge auf einer Rechnung. Die wollen partout nicht untereinander stehen, obwohl ich alle Beträge mit TRANSFORM formatiere. Hier einen Ausschnitt aus dem Programm und anschließend ein Bild wie es dann auf der Rechnung aussieht. Man sieht es besonders bei den Mehrw.St. Beträgen ...

AADD(aF, {xpos+900, ypos, "Zwischensumme",oFont3}) // Zwischensumme 1 ermitteln
AADD(aF, {xpos+1400, ypos, TRANSFORM(NettoOrg,"99999.99"),oFont3})
AADD(aF, {xpos+1555, ypos, "EUR",oFont3})
ypos := ypos - 1.5 * zeilenabst

AADD(aF, {xpos+1400, ypos, REPLICATE("_",11),oFont3}) // Trennungsstrich - ab hier ohne Rabatt
ypos := ypos - 1.5 * zeilenabst

AADD(aF, {xpos+900, ypos, "Zwischensumme1",oFont3}) // Zwischensumme 2 wenn Rabatt sonst Zwischens. 1
AADD(aF, {xpos+1400, ypos, TRANSFORM(BetNetto,"99999.99"),oFont3}) // Summe BetragOhne - BetragRabatt
AADD(aF, {xpos+1555, ypos, "EUR",oFont3} )
ypos := ypos - 1.5*zeilenabst

AADD(aF, {xpos+1400, ypos, REPLICATE("_",11),oFont3}) // Trennungsstrich
ypos := ypos - 1.5 * zeilenabst

AADD(aF, {xpos+900, ypos, "Gesamtnetto",oFont3}) // Gesamtnetto
AADD(aF, {xpos+1400, ypos, TRANSFORM(BetNetto + PortoN,"99999.99"),oFont3})
AADD(aF, {xpos+1555, ypos, "EUR",oFont3})
ypos := ypos - 1.5 * zeilenabst


IF ST19 > 0 // Nettobetrag 19% Artikel
AADD(aF, {xpos+900, ypos, "MwSt. 19%",oFont3})
AADD(aF, {xpos+1400, ypos, TRANSFORM(St19,"99999.99"), oFont3})
AADD(aF, {xpos+1555, ypos, "EUR",oFont3}) // hier Porto immer 19%
ypos := ypos - 1.5*zeilenabst
ENDIF

IF ST07 > 0 // Nettobetrag 7% Artikel
AADD(aF, {xpos+900, ypos, "MwSt. 7%",oFont3})
AADD(aF, {xpos+1400, ypos, TRANSFORM(St07,"99999.99"),oFont3})
AADD(aF, {xpos+1555, ypos, "EUR *",oFont3})
ypos := ypos - 1*zeilenabst
ENDIF

AADD(aF, {xpos+1400, ypos, REPLICATE("_",11),oFont3})
ypos := ypos - 1.5 * zeilenabst

AADD(aF, {xpos+900, ypos, "Gesamtbetrag",oFont3}) // Gesamtbrutto

AADD(aF, {xpos+1400, ypos, TRANSFORM( BetNetto + PortoN + St19 + St07,"99999.99"),oFont3})

AADD(aF, {xpos+1555, ypos, "EUR",oFont3})

Gruß Wolfgang
Dateianhänge
IMG2.jpg
IMG2.jpg (67.08 KiB) 7934 mal betrachtet
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Fettdruck einer nichtproportionalen Schrift?

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Bei den Schriften ist es leider nicht so einfach, je nach Sprache und installiertem Font sehen die recht unterschiedlich aus.
Wenn die Bezeichnung nicht genau stimmt, wählt Xbase++ (oder Windows) einen "ähnlichen" ... was SEHR unähnlich enden kann.
Mit Arial und den Standardfonts ist man auf der sicheren Seite, ansonsten per Fontauswahldialog auswählen lassen (und Name speichern)
YUP damit hast du ja auch alle Standard Werte des Fonts übernommen.
Fett bzw. BOLD sind im Prinzip ja auch nur Konstanten FW_BOLD / FW_NORMAL wenn nicht

Code: Alles auswählen

oFont:WeightClass
benutzt wird.
ich habe hier mal die interessanten Konstanten dokumentiert

Code: Alles auswählen

//
// CreateFontA
//
// http://msdn.microsoft.com/en-us/library/dd183499%28v=vs.85%29.aspx

//
// CreateFont fnWeight-Konstanten
//
#define FW_NORMAL                400             // Normal
#define FW_BOLD                  700             // Fett

//
// CreateFont fdwOutPrecision-Konstanten
//
#define OUT_DEFAULT_PRECIS       0               // Benutzt den Standard-Font
#define OUT_TT_PRECIS            4               // Benutzt eine TrueType-Schriftart
#define OUT_DEVICE_PRECIS        5               // Benutzt einen Device-Font wenn mehrere Dateien
                                                 // mit dem selben Namen existieren
#define OUT_RASTER_PRECIS        6               // Benutzt einen Raster-Font wenn mehrere Dateien
                                                 // mit dem selben Namen existieren
//
// CreateFont fdwPitchAndFamily-Konstanten
//
#define DEFAULT_PITCH            0               // Standard
#define FIXED_PITCH              1               // Fest
#define VARIABLE_PITCH           2               // Variabel

//
// CreateFont fdwClipPrecision-Konstanten
//
#define CLIP_DEFAULT_PRECIS      0               // Standard
#define CLIP_CHARACTER_PRECIS    1               // Not used.
#define CLIP_STROKE_PRECIS       2               // Raster Vector oder TrueType Fonts für die Enumeration

//
// CreateFont fdwQuality-Konstanten
//
#define DEFAULT_QUALITY          0               // Standard Qualität
#define DRAFT_QUALITY            1               // Das Erscheinen des Fonts ist weniger wichtig als bei PROOF_QUALITY
#define PROOF_QUALITY            2               // Die Qualität der Erscheinung ist wichtiger als
                                                 // das exakte šbereinstimmen mit den Font-Attributen
#define NONANTIALIASED_QUALITY   3               // (Win 9x, NT 4.0, 2000) Die Schriftart
                                                 // wird nicht mit Anitaliasing gezeichnet
#define ANTIALIASED_QUALITY      4               // (Win 9x, NT 4.0, 2000) Die Schriftart wird_
                                                 // immer mit Anitaliasing gezeichnet wenn möglich
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 484
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen
Hat sich bedankt: 14 Mal
Danksagung erhalten: 5 Mal

Re: Fettdruck einer nichtproportionalen Schrift? [ERLEDIGT]

Beitrag von Wolfgang_B »

Hallo Jimmy, herzlichen Dank. Werde ich mir mal zu Gemüte führen ...
Gruß Wolfgang
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Antworten