![]() |
AW: Im druck Zeilenumbruch erzwingen
Zitat:
und ClientRect = Größe/Position des Zeichenbereichs Was wird man da wohl nun anpassen müssen, um die Schrift auf den Ausdruck zu bekommen? |
AW: Im druck Zeilenumbruch erzwingen
Indem Du nicht das Handle des eigenen Canvas, sondern das des Printer.Canvas übergibst. Allerdings sind da noch einige andere Dinge zu beachten, siehe himitsus Einwände, Drucken ist eben leider nicht ganz so einfach mit Delphi, wenn man alles selbst übernehmen möchte.
|
AW: Im druck Zeilenumbruch erzwingen
Ok, ich habs nun fast hinbekommen. Es wird zwar ausgedruckt, aber ich komm mit den Positionen nicht klar. Es erscheint immer wieder in der linken Ecke oben. Auch wenn ich den wert von InflateRect ändere. Wenn ich den auf -400 einstelle, kommt nichts auf Papier
Code:
procedure TForm1.BtnPrintClick(Sender: TObject);
var rec : TRect; begin if PrintDialog1.Execute then begin rec.Left := 400; rec.Top := 1150; rec.Right := 4000; 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,DBEditNachname.Text); Printer.Canvas.TextOut(1500,200,DBEditVorname.Text); Printer.Canvas.Font.Style:=[]; Printer.Canvas.TextOut(400,350,DBEditAdresse.Text); Printer.Canvas.TextOut(1500,350,DBEditOrt.Text); Printer.Canvas.Font.Style:=[fsUnderline]; Printer.Canvas.TextOut(400,600,'Telefon:'); Printer.Canvas.Font.Style:=[]; Printer.Canvas.TextOut(400,750,DBEditTelefon1.Text); Printer.Canvas.TextOut(1500,750,DBEditTelefon2.Text); Printer.Canvas.TextOut(2500,750,DBEditTelefon3.Text); Printer.Canvas.Font.Style:=[fsUnderline]; Printer.Canvas.TextOut(400,1000, 'Beschreibung:'); Printer.Canvas.Font.Style:=[]; rec := ClientRect; InflateRect(rec, -3, -3); DrawText(Printer.Canvas.Handle, PChar(DBMemo1.Text), -1, rec, DT_TOP or DT_LEFT or DT_WORDBREAK); end; |
AW: Im druck Zeilenumbruch erzwingen
Das mit dem ClientRect war ja auch nur ein Beispiel, Du musst das Rechteck schon passend definieren.
|
AW: Im druck Zeilenumbruch erzwingen
Danke für die Hilfe, inzwischen hab ich es auch rausgefunden.
Jetzt funktioniert es. Betreffend der Auflösung versteh ich nicht ganz, was damit gemeint ist. |
AW: Im druck Zeilenumbruch erzwingen
Du druckst in einer festen Größe (Pixel) ... was ist aber, wenn ein Drucker mal mehr oder weniger Pixel darstellt?
Dann verändert sich die größe der Pixel und damit auch die Größe deiner Schrift und aller anderen Maße (wie z.B. die Position der Texte). :wink: Tipp: nimm eine Form, stell sie auf Vollbild und schreibe darauf einen Text (im OnPaint mit TextOut). Und nun verstell man die Auflösung deines Monitors. |
AW: Im druck Zeilenumbruch erzwingen
Ok, da es aber nur Text ist, würden 72 Pixel reichen. Kann man irgendow einstellen, dass er NUR mit der vorgegebenen Auflösung druckt?
|
AW: Im druck Zeilenumbruch erzwingen
Wenn Du nicht umrechnen willst kannst Du per
SetCanvasZoomAndRotation, hier enthalten ![]() das Printercanvas an die von Dir gewünschte Auflösung "umstellen" |
AW: Im druck Zeilenumbruch erzwingen
Du kannst in Millimentern statt in Pixeln drucken. Dazu musst Du mit
![]() ![]() |
AW: Im druck Zeilenumbruch erzwingen
Ich hab mir das Beispiel von den schweizen angesehen und habe Font.Height:=50; eingegeben.
Am Ausdruck ändert sich die Schriftgröße aber NUR in dieser Zeile:
Code:
Bei den anderen Codezeilen, wo der Text von der DBEdit.Text stammt, ist die Schriftgröße immer gleich.
Printer.Canvas.TextOut(3500,200,DateTimeToStr(now));
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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