Font Strichstärke
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14653
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Font Strichstärke
Noch eine Frage zur grafischen Ausgabe:
In einem PresentationSpace gebe ich mit GraStrAt() Zeichenketten auf dem Drucker aus. Funktioniert soweit auch alles sehr gut.
Aber ich möchte einige der auszugebenden Strings in fett haben. Wie bekomme ich das hin? Ich habe mir u. a. schon GraSetAtrString() angesehen, aber irgendwie fehlt mir da der Durchblick.
Jan[/b]
In einem PresentationSpace gebe ich mit GraStrAt() Zeichenketten auf dem Drucker aus. Funktioniert soweit auch alles sehr gut.
Aber ich möchte einige der auszugebenden Strings in fett haben. Wie bekomme ich das hin? Ich habe mir u. a. schon GraSetAtrString() angesehen, aber irgendwie fehlt mir da der Durchblick.
Jan[/b]
- AUGE_OHR
- Marvin
- Beiträge: 12907
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Font Strichstärke
hi,
gruss by OHR
Jimmy
Du musst einfach nur den Font "setzen"Jan hat geschrieben: In einem PresentationSpace gebe ich mit GraStrAt() Zeichenketten auf dem Drucker aus. Funktioniert soweit auch alles sehr gut.
Aber ich möchte einige der auszugebenden Strings in fett haben. Wie bekomme ich das hin? Ich habe mir u. a. schon GraSetAtrString() angesehen
Code: Alles auswählen
oFont:configure( "22.Arial.Fett" )
graSetFont ( oPrinter, oFont )
GraStringAt( oPrinter, {nX,nY},"Hallo World")
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Jan,
wenn Du das nicht willst, kannst Du auch folgendermaßen auf fett umschalten:
und zurück mit:
Viele Grüße,
Martin
wenn Du das nicht willst, kannst Du auch folgendermaßen auf fett umschalten:
Code: Alles auswählen
oFont2:bold := .t.
oFont2:weightClass := XBPFONT_WEIGHT_BOLD
Code: Alles auswählen
oFont2:bold := .f.
oFont2:weightClass := XBPFONT_WEIGHT_NORMAL
Martin
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.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Doch, genau das machen die. GraStrAt() verwendet den festgelegten Font für den ganzen String. Den aktuellen Font kann man wechseln auf einen anderen Font, der gleich bis auf z.B. FETT ist. Das einzige Problem ist, dass man bei jeder Druckausgabe den Endpunkt ermitteln und dann das nächste GraStrAt() an die Folgeposition verschieben muß.Jan hat geschrieben:über die Gra-Funktionen etwas manipulieren zu können, aber die greifen ja nicht wirklich auf den Font zurück.
Ein solches Vorgehen verwende ich in meiner Druckerklass bei PrintMemo um z.B. Blocksatz zu drucken.
PS: nur zur Klarstellung, man sollte z.B. am Anfang des Programmes, oder bei der ersten Verwendung alle benötigten Fontobjecte erzeugen und vorhalten. Innerhalb des Programms dann einfach den gewünschten als Standard festlegen.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,Martin Altmann hat geschrieben:Hallo Jan,
wenn Du das nicht willst, kannst Du auch folgendermaßen auf fett umschalten:und zurück mit:Code: Alles auswählen
oFont2:bold := .t. oFont2:weightClass := XBPFONT_WEIGHT_BOLD
Viele Grüße,Code: Alles auswählen
oFont2:bold := .f. oFont2:weightClass := XBPFONT_WEIGHT_NORMAL
Martin
wirkt das sofort ?
Ich dachte man müßte dann mit configure erst den Font wieder umschalten ?
Ich bleibe dabei, besser eine zentrale Fontverwaltung.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
ja - ein oFont2:configure() muss latürnich nach dem Ändern erfolgen!
Viele Grüße,
Martin
ja - ein oFont2:configure() muss latürnich nach dem Ändern erfolgen!
Viele Grüße,
Martin
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.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Hallo Martin,
ganz wichtig ist dabei, daß die Anzeige der grafischen Primitive
währen der Berechnung der Seiten nicht unterdrückt wird!
Also z.B. falsch:
richtig:
Falls nicht gleichzeitig gezeichnet wird, benutzt (fälschlicherweise, meine ich) xBase++ NICHT den neuen/geänderten Font, sondern den vor GraSegOpen() eingestellten Font!
Diese Erkenntnis hat mich einige Wochen nervenaufrebender Fehlersuche gekostet, bis ich es durch Zufall herausgefunden habe und Till Warweg es anschließend bestätigt hat.
Uli
ganz wichtig ist dabei, daß die Anzeige der grafischen Primitive
währen der Berechnung der Seiten nicht unterdrückt wird!
Also z.B. falsch:
Code: Alles auswählen
nOldGraSegDrawMode := GraSegDrawMode( oPS, GRA_DM_RETAIN )
Code: Alles auswählen
nOldGraSegDrawMode := GraSegDrawMode( oPS, GRA_DM_DRAWANDRETAIN )
Diese Erkenntnis hat mich einige Wochen nervenaufrebender Fehlersuche gekostet, bis ich es durch Zufall herausgefunden habe und Till Warweg es anschließend bestätigt hat.
Uli
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Uli,
hmmm, ich nutze diese Fontänderungen bei einem PrinterPS() - und da habe ich nirgendwo eine Einstellung für GraSegDrawMode() vorgenommen...
Funktioniert aber trotzdem.
Viele Grüße,
Martin
hmmm, ich nutze diese Fontänderungen bei einem PrinterPS() - und da habe ich nirgendwo eine Einstellung für GraSegDrawMode() vorgenommen...
Funktioniert aber trotzdem.
Viele Grüße,
Martin
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.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Uli,
wieso ist das langsamer?
Ich drucke sowieso immer eine ganze Seite komplett - unter Umständen auch einige Hundert hintereinander.
Jede Seite muss sowieso komplett neu gemacht werden - es ändert sich also nicht immer nur ein Teil - naja, im Prinzip schon, aber da die Teile, die gleich bleiben, auf der ganzen Seite verteilt sein können, hätte ich - wenn ich das jeweils in eigenen Segmenten machen würde - ca. 20 - 180 Segmente pro Seite, bei denen sich ca. die Hälfte auf jeder Seite ändern würden. Ich könnte vielleicht auch die gleichbleibenden Teile in ein Segment schreiben und dieses Segment auf jeder Seite ausgeben und die sich ändernden Teile immer hinzufügen...
Aber ob das so viel bringt, weiß ich wirklich nicht...
Oder habe ich das jetzt falsch verstanden?
Viele Grüße,
Martin
wieso ist das langsamer?
Ich drucke sowieso immer eine ganze Seite komplett - unter Umständen auch einige Hundert hintereinander.
Jede Seite muss sowieso komplett neu gemacht werden - es ändert sich also nicht immer nur ein Teil - naja, im Prinzip schon, aber da die Teile, die gleich bleiben, auf der ganzen Seite verteilt sein können, hätte ich - wenn ich das jeweils in eigenen Segmenten machen würde - ca. 20 - 180 Segmente pro Seite, bei denen sich ca. die Hälfte auf jeder Seite ändern würden. Ich könnte vielleicht auch die gleichbleibenden Teile in ein Segment schreiben und dieses Segment auf jeder Seite ausgeben und die sich ändernden Teile immer hinzufügen...
Aber ob das so viel bringt, weiß ich wirklich nicht...
Oder habe ich das jetzt falsch verstanden?
Viele Grüße,
Martin
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.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Martin,
beim Drucken spielt das alles keine Rolle, denn einmal muss es auf jeden Fall aufgebaut werden. Grafische Segmente (zumindest ist es bei PowerBasic so) speichern die Ausgabe der Lines, Boxes Texte etc. zwischen. Bei jedem Repaint des Fensters muß also nur ein (interner) Befehl benutzt werden um das zwischengespeicherte Segment wieder anzugeigen, wärend sonst alle Einzelbefehle erneut aufgerufen werden müssten ... wie gesagt mit Xbase++ habe ich sowas noch nicht gemacht, also alles nur Theorie
beim Drucken spielt das alles keine Rolle, denn einmal muss es auf jeden Fall aufgebaut werden. Grafische Segmente (zumindest ist es bei PowerBasic so) speichern die Ausgabe der Lines, Boxes Texte etc. zwischen. Bei jedem Repaint des Fensters muß also nur ein (interner) Befehl benutzt werden um das zwischengespeicherte Segment wieder anzugeigen, wärend sonst alle Einzelbefehle erneut aufgerufen werden müssten ... wie gesagt mit Xbase++ habe ich sowas noch nicht gemacht, also alles nur Theorie
Gruß
Hubert
Hubert
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2828
- Registriert: Fr, 10. Feb 2006 9:51
- Wohnort: Aachen
- Hat sich bedankt: 259 Mal
- Danksagung erhalten: 12 Mal
- Kontaktdaten:
Hallo Martin,
wenn Du "nur" druckst, spielt das natürlich keine Rolle.
Aber im Normalfall hat man ja eine Vorschau .
Und für die Vorschau eignen sich die Segmente sehr gut.
(siehe auch PreView-Beispiel von Alaska).
Und dabei wäre es von großem zeitlichen Vorteil, wenn das Erstellen der Segmente mit unterschiedlichen Schriften auch ohne gleichzeitigem Zeichnen funktionieren würde. Deswegen funktioniert das Preview-Beispiel ohne Änderung auch nicht, wenn man es mit verschiedenen Schriften verwendet.
Uli
wenn Du "nur" druckst, spielt das natürlich keine Rolle.
Aber im Normalfall hat man ja eine Vorschau .
Und für die Vorschau eignen sich die Segmente sehr gut.
(siehe auch PreView-Beispiel von Alaska).
Und dabei wäre es von großem zeitlichen Vorteil, wenn das Erstellen der Segmente mit unterschiedlichen Schriften auch ohne gleichzeitigem Zeichnen funktionieren würde. Deswegen funktioniert das Preview-Beispiel ohne Änderung auch nicht, wenn man es mit verschiedenen Schriften verwendet.
Uli
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Uli,
ah - OK!
Nun - ich habe auch einige Seiten, die ich (mit dem aufgebohrten XbpPreview()-Example von Alaska) sowohl am Bildschrim anzeige, als auch drucke.
Da arbeite ich natürlich mit verschiedenen Segmenten (pro Seite eines, wird in einem Array abgelegt und somit kann in der Preview auch geblättert werden).
Die dort genutzten Schriften habe ich mir jedoch vorab als public definiert, so dass ich dann einfach mit GraSetFont() (auch innerhalb einer Seite (= eines Segmentes) auf fett oder klein oder groß oder was auch immer umschalten kann.
Viele Grüße,
Martin
ah - OK!
Nun - ich habe auch einige Seiten, die ich (mit dem aufgebohrten XbpPreview()-Example von Alaska) sowohl am Bildschrim anzeige, als auch drucke.
Da arbeite ich natürlich mit verschiedenen Segmenten (pro Seite eines, wird in einem Array abgelegt und somit kann in der Preview auch geblättert werden).
Die dort genutzten Schriften habe ich mir jedoch vorab als public definiert, so dass ich dann einfach mit GraSetFont() (auch innerhalb einer Seite (= eines Segmentes) auf fett oder klein oder groß oder was auch immer umschalten kann.
Viele Grüße,
Martin
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.
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
So kann man sich irren, meine HBPrinterX-Klasse nutzt für die Druckvorschau GraSegOpen()... und speichert diese bis zu 10 (begrenzt wegen Speicherplatz) auch zwischen. Wer 11 Seiten zurückblättern will muß warten bis das System alles neue berechnet hat.brandelh hat geschrieben:wenn man Grafische Sektoren benutzt, was ich nicht tue ...
Dass ich das vergessen hatte
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
genau, wenn die verschiedenen Schriften festgelegt sind, kann man machen was mann will, Farben kann man auch für einzelne Texte ändern und Bitmaps einbinden, alles kein Problem. Allerdings wie gesagt die jeweilige Vorschau Seite wird bei mir zuerst angezeigt und dann im Array abgespeichert. Nur beim Zurückblättern wird auf die Segmente vom Array zugegriffen.Martin Altmann hat geschrieben:Die dort genutzten Schriften habe ich mir jedoch vorab als public definiert, so dass ich dann einfach mit GraSetFont() (auch innerhalb einer Seite (= eines Segmentes) auf fett oder klein oder groß oder was auch immer umschalten kann.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
Viele Grüße,
Martin
wieso Speicherplatzprobleme? Ich habe bis zu mehreren Hundert Seiten im Array zwischengespeichert...brandelh hat geschrieben:So kann man sich irren, meine HBPrinterX-Klasse nutzt für die Druckvorschau GraSegOpen()... und speichert diese bis zu 10 (begrenzt wegen Speicherplatz) auch zwischen. Wer 11 Seiten zurückblättern will muß warten bis das System alles neue berechnet hat.
Viele Grüße,
Martin
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.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
Habt Ihr denn Glück mit dem Wetter?
Viele Grüße,
Martin
ah - OK! Das sehe ich dann latürnich ein!brandelh hat geschrieben:unter Win2000 mag das gehen, ich habe aber die Druckerklasse noch unter Win98 entwickelt und betrieben, da kam es irgendwann zu Problemen.
Ich habe mich schon gewundert...brandelh hat geschrieben:PS: dies schreibe ich aus einem Internet@Cafe aus Dresden, ich kanns halt nicht lassen
Habt Ihr denn Glück mit dem Wetter?
Viele Grüße,
Martin
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.