Automatischer Zeilenumbruch beim Drucken?

Hallo,
ich möchte mit Delphi etwas ausdrucken, der Drucker bricht
aber jedes mal dem Text am Seitenende ab.

Wie kann man es anstellen, dass er anstatt auf zuhören in der nächsten Zeile weiterdruckt?

Ansonsten würde mir der Parameterbefehl um mit Notepad zu drucken auch schon reichen :wink:

Vielen Dank schon mal im Vorraus
Wolfgang

Hallo,

Verwende statt TextOut einfach DrawText (siehe Online-Hilfe). Das macht einen automatischen Zeilenumbruch.

Gruß
Jochen

Hi vielen dank!
aber kannst du mir vielleicht ein beispiel angeben?!
ich brauch des dringend und hab net die zeit rum zusuchen.
vielen danke
wolfgang

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi nochmal,
ich habe jetzt einen funktioniereden DrawText aufruf, aber
der Drucker gibt einfach nichts aus!

ein Code aussschnitt, was stimmt nicht?
ARect.Left := x;
ARect.Top := 800;
ARect.Right := 1900;
ARect.Bottom := 1900;
Printer.Canvas.FillRect(ARect);
DrawText(Printer.Canvas.Handle ,PChar(Memo2.Lines.Text),-1,ARect,DT_LEFT or DT_VCENTER or DT_SINGLELINE or DT_NOCLIP);

Vielen Dank schon, noch mal
Wolfgang

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ich habe Delphi hier nicht installiert, daher kann ich nicht so einfach nachsehen. Ich denke aber, bei den DT-Parametern fehlt ein DT_WORDBREAK und das DT_SINGLELINE ist zuviel.

DT_VCENTER und DT_WORDBREAK funktionieren glube ich nicht zusammen (also nur: entweder - oder). Wenn du den Text mit Zeilenumbruch vertikal zentrieren willst, musst du Drawtext erst mit dem Parameter DT_CALCRECT aufrufen. In ARect befindet sich dann der tatsächlich benötigte Platz für die vorgegebene Breite des Rechtecks. Dann kannst du ausrechnen, wo du ARect plazieren must.

Beispiel (die Angaben in Gänsefüßchen ind erklärende Bezeichnungen dessen, was da hin soll):

ARect.Left := „Linke Position des Textes“;
ARect.Right := „Linke Position des Textes plus max. Breite der Textzeilen“
ARect.Top := 0;
ARect.Bottom := 0;

DrawText
(
Printer.Canvas.Handle,
PChar(Memo2.Lines.Text),
-1,
ARect,
DT_LEFT or DT_WORDBREAK or DT_CALCRECT
);

OffsetRect
(
ARect,
0,
„Gesamthöhe des Bereichs, der für die Ausgabe des Textes zur Verfügung steht“ - ARect.Bottom div 2
);

DrawText
(
Printer.Canvas.Handle,
PChar(Memo2.Lines.Text),
-1,
ARect,
DT_LEFT or DT_WORDBREAK
);

Gruß
Jochen