AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Im druck Zeilenumbruch erzwingen

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

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

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
m-werk

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 10:17
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?
Grüße, m-werk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 10:25
Zitat:
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;
Canvas = Self.Canvas (bzw. FormX.Canvas)
und ClientRect = Größe/Position des Zeichenbereichs

Was wird man da wohl nun anpassen müssen, um die Schrift auf den Ausdruck zu bekommen?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 10:33
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.
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
m-werk

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

AW: Im druck Zeilenumbruch erzwingen

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

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 10:52
Das mit dem ClientRect war ja auch nur ein Beispiel, Du musst das Rechteck schon passend definieren.
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
m-werk

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

AW: Im druck Zeilenumbruch erzwingen

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

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 11:20
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).

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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:51 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