hbprint -> Seitenüberwachung [erledigt]

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

hbprint -> Seitenüberwachung [erledigt]

Beitrag von Wolfgang_B »

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.
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
Benutzeravatar
brandelh
Foren-Moderator
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: hbprint -> Seitenüberwachung

Beitrag von brandelh »

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.
Gruß
Hubert
Benutzeravatar
Marcus Herz
1000 working lines a day
1000 working lines a day
Beiträge: 851
Registriert: Mo, 16. Jan 2006 8:13
Wohnort: Allgäu
Hat sich bedankt: 39 Mal
Danksagung erhalten: 192 Mal
Kontaktdaten:

Re: hbprint -> Seitenüberwachung

Beitrag von Marcus Herz »

@Hubert: Auf Malle?
Gruß Marcus

Erkenne, was du findest, dann weißt du, wonach du gesucht hast
Benutzeravatar
brandelh
Foren-Moderator
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: hbprint -> Seitenüberwachung

Beitrag von brandelh »

ne ne zu Hause :-)

im Home Office, der Dienstrechner hat nix von meinen Xbase Sachen drauf ;-)
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: hbprint -> Seitenüberwachung

Beitrag von Wolfgang_B »

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
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
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: hbprint -> Seitenüberwachung

Beitrag von Wolfgang_B »

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.

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
Benutzeravatar
brandelh
Foren-Moderator
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: hbprint -> Seitenüberwachung [erledigt]

Beitrag von brandelh »

Hallo,

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 zurck

   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
man kann zwar PrintMemo() mit einem Parameter die letzte Zeile vorgeben und auch die Anzahl der Zeilen ermitteln, aber viel einfacher ist

::PrintMemoPage() :arrow: 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
Antworten