Zeilenumbrüche
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14641
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 87 Mal
- Kontaktdaten:
Zeilenumbrüche
Wenn ich einen Text drucken möchte der länger ist als der zur Verfügung stehende Platz in einer Zeile, dann kann ich den ja umbrechen. Aber leider nur gerechnet nach Buchstaben.
Geht das auch nach gemessener Länge des Textes? Hat einer von Euch sowas schon mal gemacht? Immerhin arbeiten wir unter Windows ja meist mit Roportionalschriften, da ist das unter Clipper mit den Memo-Funktionen eingeführte Zählen der Buchstaben bei Nichtproportionalschriften nicht mehr ganz Stand der Technik. Denke ich mal.
Jan
Geht das auch nach gemessener Länge des Textes? Hat einer von Euch sowas schon mal gemacht? Immerhin arbeiten wir unter Windows ja meist mit Roportionalschriften, da ist das unter Clipper mit den Memo-Funktionen eingeführte Zählen der Buchstaben bei Nichtproportionalschriften nicht mehr ganz Stand der Technik. Denke ich mal.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16501
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Zeilenumbrüche
Hallo Jan,
noa kloar:
Alle Buchstaben abschneiden, die den Text zu lang machen:
Text ordentlich an einer maximalen Koordinate umbrechen in mehrere Zeilen:
Viele Grüße,
Martin
noa kloar:
Alle Buchstaben abschneiden, die den Text zu lang machen:
Code: Alles auswählen
cTxt := alltrim( hundenamen )
aTextBox := GraQueryTextBox( oPS, cTxt )
nFontWidth := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
do while nFontWidth > 680
cTxt := left( cTxt, len( cTxt ) - 1 )
aTextBox := GraQueryTextBox( oPS, cTxt )
nFontWidth := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
enddo
GraStringAt( oPS, { 250, nY }, cTxt )
Code: Alles auswählen
aTextBox := GraQueryTextBox( oPS, cTxt )
nFontWidth := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
do while nFontWidth > 1750
t1 := 0
do while .t.
t2 := at( " ", cTxt, t1 + 1 )
if t2 > 1
cTxt1 := left( cTxt, t2 - 1 )
aTextBox := GraQueryTextBox( oPS, cTxt1 )
nFontWidth := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
if nFontWidth > 1750
if t1 <> 0
GraStringAt( oPS, { 200, nY }, left( cTxt, t1 - 1 ) )
cTxt := substr( cTxt, t1 + 1 )
else
GraStringAt( oPS, { 200, nY }, left( cTxt, t2 - 1 ) )
cTxt := substr( cTxt, t2 + 1 )
endif
t1 := 0
nY -= ( nFontHeight + 2 )
zeile ++
aTextBox := GraQueryTextBox( oPS, cTxt )
nFontWidth := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
exit
else
t1 := t2
endif
else
aTextBox := GraQueryTextBox( oPS, cTxt )
nFontWidth := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
if ( nFontWidth > 1750 ) .and. ( t1 <> 0 )
GraStringAt( oPS, { 200, nY }, left( cTxt, t1 - 1 ) )
cTxt := substr( cTxt, t1 + 1 )
nY -= ( nFontHeight + 2 )
zeile ++
endif
GraStringAt( oPS, { 200, nY }, cTxt )
nY -= ( nFontHeight + 2 )
zeile ++
cTxt := ""
aTextBox := GraQueryTextBox( oPS, cTxt )
nFontWidth := aTextBox[ 3, 1 ] - aTextBox[ 2, 1 ]
exit
endif
enddo
enddo
if .not. empty( cTxt )
GraStringAt( oPS, { 200, nY }, cTxt )
nY -= ( nFontHeight + 2 )
zeile ++
cTxt := ""
endif
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.
- Jan
- 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: Zeilenumbrüche
Moin Martin,
joh hey. Danke für den ganzen Code, das macht es natürlich noch wesentlich einfacher für mich. Wer mich da mal nachher reingraben.
Jan
joh hey. Danke für den ganzen Code, das macht es natürlich noch wesentlich einfacher für mich. Wer mich da mal nachher reingraben.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15688
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Zeilenumbrüche
Hi,
in meiner Druckerklasse gibt es die Methode PrintMemo(), die bricht nicht nur um, sondern kann z.B. auch Blocksatz drucken.
Da der Quellcode offen ist, kannst du dir das da ja ansehen
in meiner Druckerklasse gibt es die Methode PrintMemo(), die bricht nicht nur um, sondern kann z.B. auch Blocksatz drucken.
Da der Quellcode offen ist, kannst du dir das da ja ansehen
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16501
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Zeilenumbrüche
Yup - zum Thema Blocksatz habe ich was in der Wissensbasis veröffentlicht - das kann man natürlich mit dem kombinieren, was ich oben gepostet habe
Viele Grüße,
Martin
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: 15688
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Re: Zeilenumbrüche
Hallo Martin,
wenn ich das recht sehe schreibst du diese Routine bei jeder Ausgabe neu ?
Das wäre mir zu mühsam. Ich habe das daher in meine Druckerklasse gepackt - und vergessen ...
an deiner Stelle würde ich dies zumindest in eine Funktion auslagern.
Die kann man dann immer aufrufen und kümmert sich intern um alles.
wenn ich das recht sehe schreibst du diese Routine bei jeder Ausgabe neu ?
Das wäre mir zu mühsam. Ich habe das daher in meine Druckerklasse gepackt - und vergessen ...
an deiner Stelle würde ich dies zumindest in eine Funktion auslagern.
Die kann man dann immer aufrufen und kümmert sich intern um alles.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16501
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Zeilenumbrüche
Hallo Hubert,
könnte man machen - ist richtig!
Aber Blocksatz brauche ich bei mir eh' nur an einer Stelle.
Und das mit dem Abschneiden an sehr wenigen - ist mit der Zeit gewachsen, da lohnt sich das nachträgliche ummodeln (noch) nicht - ausserdem bin ich grundsätzlich faul
Viele Grüße,
Martin
könnte man machen - ist richtig!
Aber Blocksatz brauche ich bei mir eh' nur an einer Stelle.
Und das mit dem Abschneiden an sehr wenigen - ist mit der Zeit gewachsen, da lohnt sich das nachträgliche ummodeln (noch) nicht - ausserdem bin ich grundsätzlich faul
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.