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
Seite 2 von 3     12 3      
Benutzerbild von himitsu
himitsu

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 11: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?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 11: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
 
#13

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 11: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.624 Beiträge
 
Delphi 12 Athens
 
#14

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 11: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
 
#15

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 12: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.063 Beiträge
 
Delphi 12 Athens
 
#16

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 12: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
m-werk

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 12:50
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?
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
 
#18

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 13:12
Wenn Du nicht umrechnen willst kannst Du per
SetCanvasZoomAndRotation, hier enthalten
http://www.delphipraxis.net/167172-r...-ausgeben.html
das Printercanvas an die von Dir gewünschte Auflösung "umstellen"
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 DeddyH
DeddyH

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

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 13:13
Du kannst in Millimentern statt in Pixeln drucken. Dazu musst Du mit MSDN-Library durchsuchenSetMapMode die Einheit umstellen. Ein kurzes Beispiel findest Du z.B. bei den Schweizern.
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
 
#20

AW: Im druck Zeilenumbruch erzwingen

  Alt 11. Apr 2012, 13:59
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:
Printer.Canvas.TextOut(3500,200,DateTimeToStr(now));
Bei den anderen Codezeilen, wo der Text von der DBEdit.Text stammt, ist die Schriftgröße immer gleich.
Grüße, m-werk
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 16:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz