Font Strichstärke

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
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:

Font Strichstärke

Beitrag von Jan »

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]
Benutzeravatar
AUGE_OHR
Marvin
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

Beitrag von AUGE_OHR »

hi,
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
Du musst einfach nur den Font "setzen"

Code: Alles auswählen

      oFont:configure( "22.Arial.Fett" )
      graSetFont ( oPrinter, oFont )
      GraStringAt( oPrinter, {nX,nY},"Hallo World")
gruss by OHR
Jimmy
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 »

Moin Jimmy,

ja, das hatte ich befürchtet. Meine Hoffnung war, über die Gra-Funktionen etwas manipulieren zu können, aber die greifen ja nicht wirklich auf den Font zurück.

Muß ich mal schauen, wie ich das jetzt umstricke daß ich den Font direkt manipuliere.

Danke für den Hinweis.

Jan
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Jan,
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
und zurück mit:

Code: Alles auswählen

oFont2:bold := .f.
oFont2:weightClass := XBPFONT_WEIGHT_NORMAL
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: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Jan hat geschrieben:über die Gra-Funktionen etwas manipulieren zu können, aber die greifen ja nicht wirklich auf den Font zurück.
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ß.

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
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 »

Martin Altmann hat geschrieben:Hallo Jan,
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
und zurück mit:

Code: Alles auswählen

oFont2:bold := .f.
oFont2:weightClass := XBPFONT_WEIGHT_NORMAL
Viele Grüße,
Martin
Hi,

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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
ja - ein oFont2:configure() muss latürnich nach dem Ändern erfolgen!
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
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 »

Noch mal eine Dummie-Nachfrage: Wenn ich nur Zugriff auf oPS habe, wie ändere ich dann den Font?

Jan
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 »

OK Jungs, vergesst die Frage. Nach Entfernen eines Tippfehlers läuft es jetzt.

Jan
UliTs
Der Entwickler von "Deep Thought"
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:

Beitrag von UliTs »

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:

Code: Alles auswählen

nOldGraSegDrawMode := GraSegDrawMode( oPS, GRA_DM_RETAIN )
richtig:

Code: Alles auswählen

nOldGraSegDrawMode := GraSegDrawMode( oPS, GRA_DM_DRAWANDRETAIN )
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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
: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: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

ich vermute, dass das nur Zutrifft wenn man Grafische Sektoren benutzt, was ich nicht tue ...
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
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:

Beitrag von UliTs »

Hallo Martin,

stimmt, bei der Standardeinstellung gibt es keine Probleme, ist natürlich aber auch viel langsamer.

Uli
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
: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: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

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 ;)
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
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:

Beitrag von UliTs »

Hallo Martin,

wenn Du "nur" druckst, spielt das natürlich keine Rolle.
Aber im Normalfall hat man ja eine Vorschau :wink: .
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
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

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
: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: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

brandelh hat geschrieben:wenn man Grafische Sektoren benutzt, was ich nicht tue ...
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.

Dass ich das vergessen hatte :shock:
Gruß
Hubert
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 »

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.
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.
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
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.
wieso Speicherplatzprobleme? Ich habe bis zu mehreren Hundert Seiten im Array zwischengespeichert...

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: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Martin,

unter Win2000 mag das gehen, ich habe aber die Druckerklasse noch unter Win98 entwickelt und betrieben, da kam es irgendwann zu Problemen.

PS: dies schreibe ich aus einem Internet@Cafe aus Dresden, ich kanns halt nicht lassen ;-)
Gruß
Hubert
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16517
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Hubert,
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.
ah - OK! Das sehe ich dann latürnich ein!
brandelh hat geschrieben:PS: dies schreibe ich aus einem Internet@Cafe aus Dresden, ich kanns halt nicht lassen ;-)
Ich habe mich schon gewundert...
Habt Ihr denn Glück mit dem Wetter?

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: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi Martin,

strahlender Sonnenschein und freie Straßen,
da waren die 600KM (aufgeteilt auf 2 Fahrer) kein Problem.
So wie es aussieht wird das Wetter die nächsten Tage halten.
Gruß
Hubert
Antworten