Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Memofeld inhalt drucken (https://www.delphipraxis.net/54481-memofeld-inhalt-drucken.html)

150gozilla 5. Okt 2005 09:49


Memofeld inhalt drucken
 
Hallo,

Wie kann man den den Inhalt(Text) eines Memofeldes drucken ?

Treffnix 5. Okt 2005 10:03

Re: Memofeld inhalt drucken
 
Hallo.

z.B. so:

Delphi-Quellcode:
Printer.BeginDoc;
Printer.Canvas.TextOut(0, 0, Memo1.Lines.Text);
Printer.EndDoc;
Dazu musst du die Unit Printers in die uses aufnehmen.

150gozilla 5. Okt 2005 10:09

Re: Memofeld inhalt drucken
 
Ja danke, das funktioniert.

Aber leider druckt er mir alles in eine reihe

kann man da noch was machen ?

Flocke 5. Okt 2005 10:18

Re: Memofeld inhalt drucken
 
Du meinst, dass er keinen automatischen Zeilenumbruch macht, oder?

Lösung 1: Nimm ein RichEdit-Control und drucke mit dessen Print-Methode

Lösung 2: Nimm ein TextFile, weise es mit AssignPrn dem Drucker zu und drucke jede Zeile mit WriteLn dorthin

Es gibt auch noch 'ne Menge anderer Möglichkeiten (DrawText benutzen usw.).

150gozilla 5. Okt 2005 10:20

Re: Memofeld inhalt drucken
 
Zitat:

Zitat von Flocke
Du meinst, dass er keinen automatischen Zeilenumbruch macht, oder?

Lösung 1: Nimm ein RichEdit-Control und drucke mit dessen Print-Methode

Lösung 2: Nimm ein TextFile, weise es mit AssignPrn dem Drucker zu und drucke jede Zeile mit WriteLn dorthin

Es gibt auch noch 'ne Menge anderer Möglichkeiten (DrawText benutzen usw.).

:wiejetzt: also, jetzt druckt er alles in eine reie.

Aber im Memo habe ich jetzt z.B 3 Zeilen text, so soll er mir das auch drucken, also er soll mir einen zeilenumbruch m achen

Treffnix 5. Okt 2005 10:25

Re: Memofeld inhalt drucken
 
Ungetestet, aber so ähnlich könnte es gehen ;):

Delphi-Quellcode:

var i: Integer;

printer.BeginDoc;
for i := 0 to memo1.lines.count -1 do Begin
  printer.canvas.textout( 0, i * printer.Canvas.TextHeight( Memo1.Lines[i] ) , Memo1.Lines[i]);
End;
printer.EndDoc;

150gozilla 5. Okt 2005 10:29

Re: Memofeld inhalt drucken
 
danke, funktioniert einwandfrei :)

smart 5. Okt 2005 10:33

Re: Memofeld inhalt drucken
 
Du kannst auch so ein TMemo ausdrucken:
Delphi-Quellcode:
Var
    Zeile: Integer;
    PrintText: TextFile;
begin
  AssignPrn(PrintText);
  Rewrite(PrintText);
  Printer.Canvas.Font := Memo1.Font;
  for Zeile := 0 to Memo1.Lines.Count - 1 do
  Writeln(PrintText, Memo1.Lines[Zeile]);
  CloseFile(PrintText);

150gozilla 5. Okt 2005 10:36

Re: Memofeld inhalt drucken
 
Ja, so würde es auch gehen. :mrgreen:

tigerman33 5. Okt 2005 15:33

Re: Memofeld inhalt drucken
 
Gibt es denn nirgends eine einfachere Kapselung von Druckern? Wo ich einfach so eine Art "WriteLn"Befehl aufrufen kann, und der druckt das dann automatisch, mit Zeilenumbruch etc?

Flocke 5. Okt 2005 15:37

Re: Memofeld inhalt drucken
 
Zitat:

Zitat von tigerman33
Gibt es denn nirgends eine einfachere Kapselung von Druckern? Wo ich einfach so eine Art "WriteLn"Befehl aufrufen kann, und der druckt das dann automatisch, mit Zeilenumbruch etc?

Hat smart doch oben geschrieben :roll:

Du musst halt vorher eine Text-Variable deklarieren und sie dem Drucker zuweisen (AssignPrn).

tigerman33 5. Okt 2005 15:42

Re: Memofeld inhalt drucken
 
Hab ich schon gelesen, aber sonderlich elegant ist das halt IMHO nicht. (Da kann aber smart natürlich nichts für. :wink: )

TeronG 5. Okt 2005 15:47

Re: Memofeld inhalt drucken
 
Zitat:

Zitat von tigerman33
... aber sonderlich elegant ist das halt IMHO nicht...

AHA.. und warum nicht :gruebel:

tigerman33 5. Okt 2005 15:55

Re: Memofeld inhalt drucken
 
Weil da getrennt wird, was eigentlich zusammen gehört. Ich hab dann die Printer-Klasse und diese virtuelle Textdatei. Warum die Trennung? Ich fänd es halt logischer, wenn das alles in einer Klasse stünde. Außerdem: Macht der Drucker jetzt auch automatisch die Zeilenumbrüche?

TeronG 5. Okt 2005 16:08

Re: Memofeld inhalt drucken
 
Nimm doch einfach n "RichEdit" da haste n .Print bei :mrgreen:

tigerman33 5. Okt 2005 16:17

Re: Memofeld inhalt drucken
 
Ich will aber ja mehr als nur ein Richedit drucken: Edits und vom Programm erstellte Strings sind ja auch noch dabei.

Man kann sich so eine Klasse ja auch ganz einfach selber schreiben. Es wundert mich nur vom Prinzip her, dass Borland sowas nicht mitliefert. Finde ich, ehrlich gesagt, etwas schlampig. Aber ich fürchte wir werden ein bisschen OT

Flocke 5. Okt 2005 16:18

Re: Memofeld inhalt drucken
 
Zitat:

Zitat von tigerman33
Außerdem: Macht der Drucker jetzt auch automatisch die Zeilenumbrüche?

Als ich das letzte Mal nachgesehen habe (gerade :mrgreen:) hat WriteLn(Prn, ...) die Zeichen TAB, CR, LF und Seitenvorschub (#12, FF) korrekt behandelt - und ein automatischer Zeilenumbruch bei zu langen Zeilen war auch mit drin (D2005).


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 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 by Thomas Breitkreuz