Autor Beitrag
Sors
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

Win XP
D7 Prof
BeitragVerfasst: Di 04.03.08 17:35 
Hallo, ich hab folgendes Problem:

Ich verwende dieses Programm www.delphipraxis.net...acht+ausdrucken.html um Text zu drucken. In meinem Programm möchte ich nun den Inhalt eines RichEdit ausdrucken, dazu verwende ich folgenden Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  with MyPrinter do
  begin
    BeginDoc;
    for i := 0 to (form1.richedit1.lines.count-1) do
    canvas.textout(100,100,richedit1.lines[i]);
    EndDoc;
  end;
end;


Leider wird mit diesem Code nur die letzte Zeile des RichEdits ausgedruckt. Wie schaffe ich alle Zeilen des RichEdits auszudrucken, was muss ich im Code ändern?

Mfg
Steffen


Moderiert von user profile iconNarses: Topic aus Windows API verschoben am Di 04.03.2008 um 19:53
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Di 04.03.08 19:33 
user profile iconSors hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
...
    canvas.textout(100,100,richedit1.lines[i]);
...



Du schreibst jede Zeile an die gleiche Stelle.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 04.03.08 19:36 
RichEdit hat eine Methode Print, mit der du das gesamte Edit druckst.

ausblenden Delphi-Quelltext
1:
RichtEdit1.Print('Name');					

Und die Datei kommt an den Drucker. Als Name kannst du etwas eingeben, das später als Druckauftrag angezeigt wird.
Sors Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

Win XP
D7 Prof
BeitragVerfasst: Di 04.03.08 19:54 
Ich weiß, aber gerade die Methode Print des RichEdits will ich nicht benutzen.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 04.03.08 19:56 
user profile iconSors hat folgendes geschrieben:
die Methode Print des RichEdits will ich nicht benutzen.

Und warum nicht? Vielleicht gibt es eine bessere Methode, als den Printer zu verwenden. Es kann sein, dass jemand hier einen viel einfacheren Weg weiß, wenn du dich genau ausdrückst. Weil deine Methode kommt mit überlagen Zeilen etc. nicht klar.
Sors Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

Win XP
D7 Prof
BeitragVerfasst: Di 04.03.08 20:05 
Ich verwende ja nicht das PrintDialog sonder das Programm, dessen Link ich im ersten Post angehängt hab. Über dieses Programm kann ich nämlich die Printer Eigenschaften wie Papierformat und Papierschacht auswählen.
Jetzt sollen die Einträge eines RichEdits eben mit diesem Programm ausgedruckt werden. Ich möchte halt wissen, wie ich an das Canvas des Printers den Inhalt des RichEdits so weitergeben kann, dass alle Zeilen gedruckt werden.

Bei meinem Momentanen Code ist es so, dass zuerst die Schleife durchlaufen wird und dann enddoc aufgerufen wird und erst dann der Drucker anfängt zu drucken (und zwar nur die letzten Zeile des RichEdits, da die Schleife schon durchlaufen ist). Und das ist eben mein Problem.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 04.03.08 20:19 
user profile iconnagel hat folgendes geschrieben:
Du schreibst jede Zeile an die gleiche Stelle.

Das ist das Problem. Versuch doch mal, das zu lösen.

Es ist ganz normal, dass erst das gesamte Dokument geschrieben wird, bevor es an den Drucker gesendet wird. Sonst könnte es ja passieren, dass der Drucker mittendrin aufhören muss, nur weil das Programm abgestürzt ist, oder weil du es schon frühzeitig beendet hast.

Ich habe noch nie so gedruckt, deshalb sehe ich ein kleines Problem bie dieser Variante: Du schreibst doch auf einen Canvas. Und Normale Canvases basieren auf Pixelgrafiken. wenn du jetzt Text in dieses Canvas schreibst, und es an den Drucker sendest, dann druckt der doch pixelig, oder?
Sors Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

Win XP
D7 Prof
BeitragVerfasst: Di 04.03.08 20:24 
Ich schreib auf das Canvas des Printers. Der druckt das ganz normal. Nichts verpixelt.
Und das obige Problem hab ich versucht zu lösen. Ich hab die Zeilenhöhe ermittelt und ständig auf die zweite Koordinate aufaddiert, aber das Programm liefert an den Drucker nur die letzte Zeile, die ersten Zeilen werden verschluckt. Ganz egal, was ich auch versuche.
Sors Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 47

Win XP
D7 Prof
BeitragVerfasst: Di 04.03.08 23:48 
ich bins wieder.
mein problem ist gelöst. hab auf delphi-treff.de einen passenden quellcode gefunden.