Seite 1 von 1

HBPrinter und Memofeld [erledigt]

Verfasst: Mo, 06. Jan 2020 19:48
von Wolfgang_B
Hallo,
ich bin gerade wieder mal dabei Huberts Druckerklasse in mein Programm einzubauen. Hier stosse ich auf ein Problem. Es sollen 3 Memofelder, die der Kunde selbst anlegt und die unterschiedlich lang sein können, in ein Formular eingedruckt werden.

Da diese Felder unterschiedlich lang sein können, müßte ich die Anzahl der Zeilen der Memofelder kennen, damit die Texte richtig positioniert (y) werden, Das sollte möglichst generisch sein.

Frage: Wie kann ich die Länge (Anzahl Zeilen) der Memofelder herausfinden, oder wie kann man das irgendwie mit Huberts Klasse lösen?

Re: HBPrinter und Memofeld

Verfasst: Mo, 06. Jan 2020 19:53
von Volker
Hallo Wolfgang,

die Anzahl der Zeilen kannst Du mit MlCount ermitteln.

Gruß
Volker

Re: HBPrinter und Memofeld

Verfasst: Di, 07. Jan 2020 8:52
von brandelh
Hallo,

mlcount() berechnet den Umbruch nach cpi und Clipper Umbruchsregeln, das stimmt nur wenn man einen CPI Schriftsatz und linksbündig gewählt hat,
aber das Umladen in ein Array nach dieser Vorgabe ist ein gangbarer weg.

Wenn die Felder untereinander mit flexiblen Positionen gedruckt werden sollen, habe ich das anders vorgesehen, siehe das Beispiel: TEST.PRG

Wenn man keine Kästchen oder ähnliches benötigt, kann man einfach PrintMemo() machen lassen, dies wird - wenn nötig - einen Seitenumbruch durchführen.
Wenn man mehr Kontrolle möchte gibt es verschiedene Möglichkeiten, hier die Versionsübersicht:

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
also z.B. mit ::PrintMemoPage() den Text für diese Seite drucken, den Rest speichern und auf die Folgeseite drucken.

Oder aber die Anzahl der nötigen Zeilen berechnen und anders vorgehen: ::PrintMemoCountLines(cMemoText,nMaxLineLen)

Re: HBPrinter und Memofeld

Verfasst: Di, 07. Jan 2020 14:13
von Wolfgang_B
Danke Hubert,

probier ich mal. :D

Re: HBPrinter und Memofeld

Verfasst: Di, 07. Jan 2020 16:34
von Wolfgang_B
Hallo Hubert,
du meintest bestimmt "PrintMemoLineCount". :wink:

Funktioniert :D :D

Vielen Dank!

Re: HBPrinter und Memofeld [erledigt]

Verfasst: Mi, 08. Jan 2020 8:36
von brandelh
Aus dem Gedächtnis müsste die Variable PrintMemoLineCount die aktuell gedruckte Zeilenzahl beinhalten, während die Methode die insgesamt nötige berechnet,
aber ich kann mich irren, das ist schon lange her dass ich das gemacht habe und ich drucke selten Memos ;-)