Einzelnen Beitrag anzeigen

MeierZwoo

Registriert seit: 3. Dez 2012
106 Beiträge
 
#28

AW: Schrift Größe

  Alt 4. Aug 2013, 12:48
Die umbrochenen Zeilen des Memos sind doch in TMemo.Lines : TStrings; enthalten. Wenn also das Memo proportional auf dem Drucker ausgegeben werden soll (wobei sich der TE mit proportional oder nicht nie so richtig mit sich selbst einig war) reicht es doch:

a) einen Skalierungsfaktor zwischen TMemo-Breite und Drucker-Nutzen-Breite zu ermitteln (Drucker-Nutzen-Breite = druckbarerer Bereich in x, abzüglich Heftrandbereich (wird heute aber eh meist weggelassen), abzüglich einer Reserve, falls die Druckausgabe etwas länger läuft),

b) mit diesem Skalierungsfaktor die Schriftgröße (gleiche Schrift) und den Zeilenabstand für den Drucker setzen, eben proportional zum Memo,

c) für den Druck den y-Startwert und die max. Zeilen/Seite festlegen (Seiten-Startwerte), weil wohl die wenigsten heutigen Drucker einen automatischen Seitenvorschub machen, und wenn, dann mit verstümmelten Seiten-End- und -Anfangszeilen,

d) und dann die TMemo.Lines von Anfang [0] bis Ende [length-1] abklappern, bei jeder Zeile auch einen Zeilenvorschub machen (y erhöhen), egal ob was drin ist in der Zeile oder nicht (Thema "Leerzeilen"), dabei den y-Wert mitzählen und rechtzeitig vor Erreichen des max-y-Wertes die Seite abschließen (Printer.NewPage; ) und eine neue beginnen (Seiten-Startwerte resetten) (Falls nicht das Ende der Lines erreicht sind).

Dabei fällt nur noch die extrem schwierige Entscheidung an, das Ganze in Pixeln oder mm zu machen (ich perönlich verwende grundsätzlich mm, auch weil ich beim Testdruck so schlecht Pixel messen kann und weil mm, einmal gemäß der Druckerauflösung gesetzt, auch immer mm sind).

Evtl. kann man, wie von mir auch ganz am Anfang erwähnt, eine Zeilenlängenmessung der längsten Zeile (nicht die meisten Zeichen sondern die größte Laufweite (ausgegebene Zeilenbreite)) in der Memo.canvas machen und diese längste Zeile dann in der Printer.canvas "nachmessen", um sicher zu gehen, daß die Schriftgröße für den Drucker stimmt. Dabei muß aber auch der Schrift-Stil berücksichtigt werden.

Wenn der TE allerdings das Memo nicht proportional, sondern mit festgelegten Schriftgrößen ausgeben will, kann er ja TMemo.Text : string; verwenden und muß dann eben neu umbrechen. Ansonsten gilt außer dem jeweilgen Zeilen-Textinhalt dasselbe wie oben.

FF beim Neuumbrechen mit nicht-fixed Schriften.
  Mit Zitat antworten Zitat