Entwickler-Ecke

Sonstiges (Delphi) - automatischer Zeilenumbruch bei Printer.Canvas.TextOut?


Stefan Dieler - Mo 29.07.02 16:57
Titel: automatischer Zeilenumbruch bei Printer.Canvas.TextOut?
Hallo,

ich habe einen Text, der mit Printer.Canvas.TextOut ausgegeben wird.
Da der Text manchmal aber ziemlich lang ist, möchte ich ihn ab einer best. Stelle umbrechen und in der nächsten Zeile fortsetzen.

Hat jemand eine Ahnung, wie man das machen könnte?

Vielen Dank an alle!

Gruß

Stefan


cbs - Mo 29.07.02 17:04

tag auch

nimm mal als zeilenumbruch die ascii zeichen 13 und 10

Quelltext
1:
Printer.Canvas.TextOut(10,10, 'Zeile1' + #13#10 + 'Zeile2');                    

vieleicht reicht auch nur die 13 musste mal testen

ich habs net ausprobiert!


cbs - Mo 29.07.02 17:09

hmmm ne, muss mich korigieren :oops:
scheint nicht zu funktionieren

guck dir mal das hier an:
mehrzeiligen Text auf einem Canvas ausgeben (swissdelphicenter.ch) [http://www.swissdelphicenter.ch/de/showcode.php?id=80]
is aber nen bischen unelegant, vieleicht hat ja jemand noch ne bessere lösung?!?


GPF - Mo 29.07.02 19:41

Anstatt Textout probiere die Windows Routine DrawText.
Du findest näheres in der Windows API Hilfe oder falls Du die Sources besitzt ein schönes Beispiel in der Unit StdCtrls.pas in der Prozedur procedure TCustomLabel.DoDrawText(var Rect: TRect; Flags: Longint).

Der Aufruf müsste dann wie folgt lauten:


Quelltext
1:
2:
Flags:=DT_EXPANDTABS or DT_WORDBREAK;
DrawText (Canvas.Handle, PChar (DeinText), Length(DeinText), Rect, Flags);


Wenn Du mit den Flags spielst kannst Du auch z.B. die Ausrichtung steuern. Dazu mehr aber in der Windows SDK Hilfe zu DrawText.
Rect gibt den Bereich an, in dem Dein Text gezeichnet werden soll.
Falls Du die Ausmaße eines Textes ermitteln möchtest verwende zusätzlich das Flag DT_CALCRECT. Damit wird nichts gezeichnet - aber die Ausmaße in der Struktur Rect (vom Typ TRect) gespeichert.

MfG
GPF