HBPrinter und Memofeld [erledigt]

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 311
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

HBPrinter und Memofeld [erledigt]

Beitrag von Wolfgang_B » Mo, 06. Jan 2020 19:48

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?
Zuletzt geändert von Wolfgang_B am Di, 07. Jan 2020 17:50, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.

Benutzeravatar
Volker
Rookie
Rookie
Beiträge: 9
Registriert: Sa, 29. Okt 2005 13:57
Wohnort: Hof
Kontaktdaten:

Re: HBPrinter und Memofeld

Beitrag von Volker » Mo, 06. Jan 2020 19:53

Hallo Wolfgang,

die Anzahl der Zeilen kannst Du mit MlCount ermitteln.

Gruß
Volker

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14982
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: HBPrinter und Memofeld

Beitrag von brandelh » Di, 07. Jan 2020 8:52

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)
Gruß
Hubert

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 311
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: HBPrinter und Memofeld

Beitrag von Wolfgang_B » Di, 07. Jan 2020 14:13

Danke Hubert,

probier ich mal. :D
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.

Benutzeravatar
Wolfgang_B
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 311
Registriert: Do, 14. Jun 2007 18:22
Wohnort: 94065 Waldkirchen

Re: HBPrinter und Memofeld

Beitrag von Wolfgang_B » Di, 07. Jan 2020 16:34

Hallo Hubert,
du meintest bestimmt "PrintMemoLineCount". :wink:

Funktioniert :D :D

Vielen Dank!
Beste Grüße
Wolfgang

Mitglied des Deutschsprachigen Xbase-Entwickler e. V.

Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 14982
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Kontaktdaten:

Re: HBPrinter und Memofeld [erledigt]

Beitrag von brandelh » Mi, 08. Jan 2020 8:36

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 ;-)
Gruß
Hubert

Antworten