Sorry, dass das Drucken so viele Probleme bereitet, du bist da offenbar einer der ersten User, der das mal wirklich anwendet. Und in der Praxis findet man viel andere Fehler als bei der Entwicklung.
Ja, ich kann das bestätigen. Offenbar stimmen da die berechneten Textgrößen nicht mit dem wirklich vom Drucker benötigten Platz überein, und der Drucker macht einen Zeilenumbruch. Tatsächlich ist im TextStyle des für die Ausgabe zuständigen Canvas das Flag Wordwrap gesetzt - ich meine, das ist falsch, auch wenn einige Textausgaben mehrzeilig ausfallen dürfen - das muss ich noch testen.
Für's erste solltest du in Unit TADrawerCanvas die Routine TCanvasDrawer.SimpleTextOut suchen und dort in der lokalen Prozedur DrawSimpleText nach ts := ACanvas.TextStyle die Zeile ts.WordBreak := false einfügen - diese lokale Prozedur wäre dann insgesamt:
Code: Alles auswählen
procedure DrawSimpleText(ACanvas: TCanvas; x, y: Integer; const txt: String);
// add right-to-left mode. Cannot use TextOut since it does not respect TextStyle
var
r: TRect;
ts: TTextStyle;
begin
ts := ACanvas.TextStyle;
ts.RightToLeft := FRightToLeft;
ts.WordBreak := false; // <--------- neu
ts.Clipping := false;
r := Bounds(x, y, 1, 1);
ACanvas.TextRect(r, x, y, txt, ts);
end;
Falls du diese Stelle nicht findest, ist deine Lazarus-Version zu alt - ein Wink mit dem Zaunpfahl, auf 1.6.2 umzuschwenken.
Mit dieser Änderung bleiben die Zeilenumbrüche aus. Aber dann tritt das nächste Problem zutage, nämlich dass offenbar die Abstände nicht auf die größere Auflösung hochskaliert werden. Aber dafür brauche ich etwas mehr Zeit.
[EDIT]
Nein, falscher Alarm. Ich habe über "Print via Canvas" ausgedruckt, bei dem das Hochskalieren unterbleibt. Druckt man mit "Print", wird - zumindest in der Lazarus-Entwicklerversion - der skalierende PrinterDrawer verwendet, und der Ausdruck sieht aus wie die Darstellung auf dem Bildschirm (siehe dazu auch meine Anmerkung im anderen Thread).