hbprint -> Seitenüberwachung [erledigt]
Moderator: Moderatoren
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
hbprint -> Seitenüberwachung [erledigt]
Hallo,
wie bekomme ich denn mit Huberts Druckerklasse einen automatischen Seitenumbruch hin. Ich habe einen dynamischen Seiteninhalt, dessen Länge vollkommen unterschiedlich lang generiert wird. Es ist eine Mischung aus ::printtext, ::printmemo usw., d.h. konkret erst verschiedene Texte, dann Listen und dann wieder Texte.
Bisher habe ich immer die y-Pixel überwacht. Wenn diese einen Wert unterschritten haben wurde eine neue Seite erzeugt. Dies gibt aber immer Probleme, wenn dann gerade eine Liste gedruckt wird, die über die Seite hinausgeht.
wie bekomme ich denn mit Huberts Druckerklasse einen automatischen Seitenumbruch hin. Ich habe einen dynamischen Seiteninhalt, dessen Länge vollkommen unterschiedlich lang generiert wird. Es ist eine Mischung aus ::printtext, ::printmemo usw., d.h. konkret erst verschiedene Texte, dann Listen und dann wieder Texte.
Bisher habe ich immer die y-Pixel überwacht. Wenn diese einen Wert unterschritten haben wurde eine neue Seite erzeugt. Dies gibt aber immer Probleme, wenn dann gerade eine Liste gedruckt wird, die über die Seite hinausgeht.
Zuletzt geändert von Wolfgang_B am Fr, 09. Apr 2021 18:23, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15705
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: hbprint -> Seitenüberwachung
Hi,
ich habe aktuell keinen Zugriff auf den Entwicklungsrechner.
Im Testbeispiel habe ich ja ein MemoPrint() mit Seitenwechsel, das funktioniert sehr gut, wenn nur dieses Memofeld variabel ist und der fixe Text in der Seitendefinition steht.
Ob die Seite voll ist prüft eine Methode, bitte im Beispiel nachsehen ist lange her.
Wenn mehrere Texte flexibel sind, muss man berechnen wieviel Text noch auf die Seite passt, ich meine da war ein Parameter der den automatischen Umbruch unterbindet und nur den Rest des Memofeldes zurück gibt.
ich habe aktuell keinen Zugriff auf den Entwicklungsrechner.
Im Testbeispiel habe ich ja ein MemoPrint() mit Seitenwechsel, das funktioniert sehr gut, wenn nur dieses Memofeld variabel ist und der fixe Text in der Seitendefinition steht.
Ob die Seite voll ist prüft eine Methode, bitte im Beispiel nachsehen ist lange her.
Wenn mehrere Texte flexibel sind, muss man berechnen wieviel Text noch auf die Seite passt, ich meine da war ein Parameter der den automatischen Umbruch unterbindet und nur den Rest des Memofeldes zurück gibt.
Gruß
Hubert
Hubert
- Marcus Herz
- 1000 working lines a day
- Beiträge: 862
- Registriert: Mo, 16. Jan 2006 8:13
- Wohnort: Allgäu
- Hat sich bedankt: 39 Mal
- Danksagung erhalten: 197 Mal
- Kontaktdaten:
Re: hbprint -> Seitenüberwachung
@Hubert: Auf Malle?
Gruß Marcus
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
Den Kopf in den Sand zu stecken verbessert die Welt auch nicht.
- brandelh
- Foren-Moderator
- Beiträge: 15705
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: hbprint -> Seitenüberwachung
ne ne zu Hause
im Home Office, der Dienstrechner hat nix von meinen Xbase Sachen drauf
im Home Office, der Dienstrechner hat nix von meinen Xbase Sachen drauf
Gruß
Hubert
Hubert
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: hbprint -> Seitenüberwachung
Hm, das gibt eine wilde Rechnerei, da alle Texte variabel sind. Nochmal zur Erklärung. Das Formular ist ein Stammblatt des Kunden, das sowohl die Stammdaten enthält, aber auch alle Aufträge, Rechnungen, OP usw. Das sind alles Tabellen die jedes mal unterschiedlich lang sind.
Es gibt eine Methode um herauszufinden wieviel Zeilen ein Memofeld hat -> ::PrintMemoCountLines(::cText, nMaxLineLen). Wie lange die Tabelle sind kann ich auch ermitteln. So müsste es eigentlich gehen..
Ich versuche mich mal mit Rechnen ...
Schon mal danke!
Ein schönes Wochenende
Wolfgang
Es gibt eine Methode um herauszufinden wieviel Zeilen ein Memofeld hat -> ::PrintMemoCountLines(::cText, nMaxLineLen). Wie lange die Tabelle sind kann ich auch ermitteln. So müsste es eigentlich gehen..
Ich versuche mich mal mit Rechnen ...
Schon mal danke!
Ein schönes Wochenende
Wolfgang
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: hbprint -> Seitenüberwachung
Funktioniert mit ::PrintMemoCountLines(::cText, nMaxLineLen) recht gut. Berechne mit der Methode wie lang die Memofelder sind, multipliziere das Ergebnis mit ::nLineFeed und vergleiche das mit dem unteren Seitenrand. Wenn der Wert größer wird, wird ein Seitenumbruch durchgeführt. Das gleiche vor Beginn der Tabellen.
Mit der Lösung kann ich leben.
Code: Alles auswählen
IF ypos + (::PrintMemoCountLines(::cText, nMaxLineLen) * ::nLineFeed) > unterer Seitenrand
Seitenumbruch
Mit der Lösung kann ich leben.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- brandelh
- Foren-Moderator
- Beiträge: 15705
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 70 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: hbprint -> Seitenüberwachung [erledigt]
Hallo,
schau mal ob du die neueste Version hast, hier ein Auszug aus der Versionsbeschreibung der PRG:
man kann zwar PrintMemo() mit einem Parameter die letzte Zeile vorgeben und auch die Anzahl der Zeilen ermitteln, aber viel einfacher ist
::PrintMemoPage() druckt den Text der in den Bereich passt und gibt den Rest zurück
Wenn du also den Bereich definierst (eventuell unterer Rand automatisch ? weiß nicht mehr genau), wird er drucken was da rein passt, nie die Seite umbrechen, und den restlichen Text zurück liefern. Den dann auf der Folgeseite wieder drucken etc. ... dazwischen kannst du auf der Seite drucken was immer du brauchst.
schau mal ob du die neueste Version hast, hier ein Auszug aus der Versionsbeschreibung der PRG:
Code: Alles auswählen
1.37 - 04.04.2013 (= 2013-04-04)
::PrintMemo() Fehler bei Seitenumbruch, gemeldet von <Werner_Bayern>
NEU ::abort() Abbruch des Druckjobs, erstellt von <Werner_Bayern> aus dem Forum.
NEU ::PrintMemoCountLines(cMemoText,nMaxLineLen) ermittelt wieviele Zeilen ::PrintMemo() ben”tigen wird, ohne tats„chlich zu drucken.
1.36 - 29.01.2012 (= 2012-01-29)
::PrintMemoLinePosX und ::PrintMemoLinePosY waren NIL bei einzeiligen Texten
::PrintMemo() druckte keine Zeilen mit nur einem Zeichen
NEU: ::PrintMemoPage() druckt den Text der in den Bereich passt und gibt den Rest zurck
1.35 - 20.05.2011 (= 2011-05-20)
::PrintMemo() speichert nun die Anzahl der gedruckten Zeilen in ::PrintMemoLineCount
::PrintMemo() speichert nun die GRA-Position der letzten gedruckten Zeilen in ::PrintMemoLinePosX und ::PrintMemoLinePosY
::PrintMemoPage() druckt den Text der in den Bereich passt und gibt den Rest zurück
Wenn du also den Bereich definierst (eventuell unterer Rand automatisch ? weiß nicht mehr genau), wird er drucken was da rein passt, nie die Seite umbrechen, und den restlichen Text zurück liefern. Den dann auf der Folgeseite wieder drucken etc. ... dazwischen kannst du auf der Seite drucken was immer du brauchst.
Gruß
Hubert
Hubert