![]() |
Im druck Zeilenumbruch erzwingen
Hallo,
ich bin gerade dabei, einen Druck-Button zu realisieren. Soweit funktioniert schon mal alles bis auf eine Sache. In meiner DB habe ich ein Memo-Feld, wo einiges eingetragen werden kann. Das Problem ist der Druck. Wie kann ich einen Zeilenumbruch hier (Im Code unten unter Anmerkung) erzwingen?
Code:
procedure TForm1.BtnPrintClick(Sender: TObject);
var rec : TRect; begin if PrintDialog1.Execute then begin rec.Left := 400; rec.Top := 1150; rec.Right := 3000; rec.Bottom := 3000; Printer.BeginDoc; Printer.Canvas.Font.Size:=10; Printer.Canvas.TextOut(3500,200,DateTimeToStr(now)); Printer.Canvas.Font.Size:=12; Printer.Canvas.Font.Style:=[fsBold]; Printer.Canvas.TextOut(400,200,ADOQuery1.FieldValues['Nachname']); Printer.Canvas.TextOut(1500,200,ADOQuery1.FieldValues['Vorname']); Printer.Canvas.Font.Style:=[]; Printer.Canvas.TextOut(400,350,ADOQuery1.FieldValues['Adresse']); Printer.Canvas.TextOut(1500,350,ADOQuery1.FieldValues['Ort']); Printer.Canvas.Font.Style:=[fsUnderline]; Printer.Canvas.TextOut(400,600,'Telefon:'); Printer.Canvas.Font.Style:=[]; Printer.Canvas.TextOut(400,750,ADOQuery1.FieldValues['Telefon1']); Printer.Canvas.TextOut(1500,750,ADOQuery1.FieldValues['Telefon2']); Printer.Canvas.TextOut(2500,750,ADOQuery1.FieldValues['Telefon3']); Printer.Canvas.Font.Style:=[fsUnderline]; Printer.Canvas.TextOut(400,1000, 'Beschreibung:'); Printer.Canvas.Font.Style:=[]; Printer.Canvas.TextRect(Rec,400,1150,ADOQuery1.FieldValues['Anmerkung']); end; Printer.EndDoc; end; |
AW: Im druck Zeilenumbruch erzwingen
IIRC schneidet TextRect gnadenlos alles ab, was nicht in das Rechteck passt. Hilft Dir vielleicht
![]() |
AW: Im druck Zeilenumbruch erzwingen
Eventuel könntest du dir auch die verschiedenen
![]() Da erstellst du graphisch ein Layout des Ausdrucks (so wie im FormDesigner) und oftmals kann man dieses dann auch direkt mit dem passenden Datensatz befüllen, oder gleich mehreren davon. |
AW: Im druck Zeilenumbruch erzwingen
Wenn Du es zu Fuß machen willst wirst Du per
Canvas.TextRect(r,s,[tfCalcRect ,tfWordBreak]); testen müssen ob es noch auf die Seite passt, den String gegf. zerlegen und zwischenrein ein Newpage absetzen |
AW: Im druck Zeilenumbruch erzwingen
Das mit DrawText hab ich mir schon angesehen, aber leider komm ich hier nicht weiter wie ich es einbauen kann.
Reports wollte ich vermeiden. Wie stelle ich es denn mit DrawText an? Ich hab mich schon die Finger wund gesucht aber noch nichts gefunden, wie ich mit DrawText arbeiten kann! |
AW: Im druck Zeilenumbruch erzwingen
|
AW: Im druck Zeilenumbruch erzwingen
Das ist es ja, was ich nicht verstehe. Ich versteh nicht, wie ich es wo in mein kleines Projekt einbauen kann.
|
AW: Im druck Zeilenumbruch erzwingen
Printer.Canvas.Handle, um genau zu sein. Hier ein kurzes Beispiel, das den String FText auf die Zeichenfläche des Formulars schreibt:
Delphi-Quellcode:
procedure TForm1.FormPaint(Sender: TObject);
var R: TRect; begin R := ClientRect; InflateRect(R, -3, -3); //Offset von 3 Pixeln in X- und Y-Richtung DrawText(Canvas.Handle, PChar(FText), -1, R, DT_TOP or DT_LEFT or DT_WORDBREAK); end; |
AW: Im druck Zeilenumbruch erzwingen
TextRect geht am Ende auch nur auf DrawTextEx los.
Du kannst also entweder direkt die WinAPI nutzen, oder eben diesen Wrapper. Die Namen der Parameter sind ähnlich und da du den VCL-Quellcode besitzt, kannst'e och einfach nachsehn, was wie so zusammenhängt. Nun könntest du dir die Delphi-Hilfe ansehn (OH: ![]() ![]() Darin stehen alle nötigen Informationen, wie man diese Funktion verwendet. Die Breite hast du dir vorgegeben und die Höhe müßtest du eventuell noch berechnen. PS: Ich würde dir noch raten entweder die Auflösung dieses Canvas anzupassen oder zumindestens dieses zu beachten, denn wenn du deinen Ausdruck z.B. für 300 DPI erstellst und dann jemand kommt und mit 150 DPI druckt, dann ist alles doppelt so groß und 75% des Ausdrucks fehlen. (Daheim hab ich irgendwo eine uralte Demo für den TPrinter rumliegen ... mal sehn ob ich die heute abend finde) Nja, der Vorteil an diesen Repoerts ist eben, daß sie für dich diese ganzen Berechnungen und nötigen Anpassungen durchführen, was aber nicht heißt, daß man sich auch selber abmühen kann und versucht alles selber zu machen. |
AW: Im druck Zeilenumbruch erzwingen
So, ich hab nun mit dem obrigen Code einen Versuch gestartet. Ich sehe jetzt den Text in meiner From ganz oben. Wie bekomme ich diesen aber nun auf Papier?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz