Autor Beitrag
funcry
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 110
Erhaltene Danke: 1

Win7 64, XP 32
C# (VS 2010 EE), Delphi (TD 2006 Win32)
BeitragVerfasst: Do 15.11.07 17:40 
Mit Delphi 2005 habe ich Probleme eine saubere Druckausgabe in Kombination mit Tabulatoren zu erreichen.

Ich verwende folgenden Druckbefehlt für einen zeilenweisen Druck:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
TabPos:=((Breite-RLinks-RRechts) div 16) + (Breite div 125);
TabbedTextOut(Printer.Canvas.Handle, RLinks, y+0*Zeilenhoehe, PChar(Zeile_1), length(Zeile_1), 1, TabPos, 0);
TabbedTextOut(Printer.Canvas.Handle, RLinks, y+1*Zeilenhoehe, PChar(Zeile_2), length(Zeile_2), 1, TabPos, 0);
TabbedTextOut(Printer.Canvas.Handle, RLinks, y+2*Zeilenhoehe, PChar(Zeile_3), length(Zeile_3), 1, TabPos, 0);
TabbedTextOut(Printer.Canvas.Handle, RLinks, y+3*Zeilenhoehe, PChar(Zeile_4), length(Zeile_4), 1, TabPos, 0);
TabbedTextOut(Printer.Canvas.Handle, RLinks, y+4*Zeilenhoehe, PChar(Zeile_5), length(Zeile_5), 1, TabPos, 0);
TabbedTextOut(Printer.Canvas.Handle, RLinks, y+5*Zeilenhoehe, PChar(Zeile_6), length(Zeile_6), 1, TabPos, 0);


Man sieht schon dass ich recht viel mit der Tab-Breite experimentiert habe.

Die Drucker-Seitenkonfiguration ist folgende:

ausblenden Delphi-Quelltext
1:
2:
3:
Printer.BeginDoc;
SetMapMode(Printer.Canvas.Handle, MM_TEXT);  // 1:1 logisch
Breite:=GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH);



Ansich bin ich mit der Druck-Ausgabe soweit zufrieden, nur die Tabulatoren sind ein letztes unschönes Problem.

Problem:
Der Anwender kann in einem TMemo den Text mit (!!) Tabulatoren eingeben.
Dieser Text wird mit dem oben dargestellten Code mit Tabulatoren gedruckt.
Da die Tabulatoren-Breite jedoch nicht exact übereinstimmt kommt es zu unschönen Text-Verschiebungen.

Beispiel:
_ = Leerzeichen

TMemo:
Hallo Welt bitte_______drucke mich_______wenn du kannst.

Drucker:
Hallo Welt bitte_drucke mich_______wenn du kannst.

Meim Problem ist also dass die Tabulator-Breite sowie die Schrift-Proportionen im TMemo mit der Tabulator-Breite und den Schrift-Proportionen beim Drucken nicht zu 100% übereinstimmen. Wobei - sofern die Schriftproportionen nicht übereinstimmen sollten, das Problem auf diesem Weg wohl nicht lösbar wäre. Ich hatte schon mit einem RichEdit getestet, jedoch scheue ich mich davor meine Druckroutine über das RichEdit abzuwickeln. Kennt jemand einen Lösungsansatz für das Problem, bzw. in welche Richtung ich probieren sollte ?