AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Im druck Zeilenumbruch erzwingen

Ein Thema von m-werk · begonnen am 11. Apr 2012 · letzter Beitrag vom 11. Apr 2012
Antwort Antwort
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#1

Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 09:13
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;
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 09:17
IIRC schneidet TextRect gnadenlos alles ab, was nicht in das Rechteck passt. Hilft Dir vielleicht MSDN-Library durchsuchenDrawText weiter?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.337 Beiträge
 
Delphi 12 Athens
 
#3

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 09:19
Eventuel könntest du dir auch die verschiedenen Report-Tools ansehn?

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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Apr 2012 um 09:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 09:30
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
m-werk

Registriert seit: 14. Jun 2002
215 Beiträge
 
Delphi 2009 Architect
 
#5

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 09:38
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!
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 09:45
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
wobei HDC Canvas.Handle ist
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.337 Beiträge
 
Delphi 12 Athens
 
#7

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 09:55
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: Delphi-Referenz durchsuchenTCanvas.TextRect) und auch die Hilfe vom Windows (MSDN: MSDN-Library durchsuchenDrawTextEx).
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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (11. Apr 2012 um 10:02 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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