Einfache listbox drucken - fehlerteufel!

Hallo. Ich habe ein bißchen in der Hilfe gestöbert, um eine listbox auszudrucken und bin dabei auf folgende Lösung gestoßen:

uses … printers;

procedure TForm1.Button1Click(Sender: TObject);
var
Line: Integer;
PrintText: TextFile; {Deklaration einer Dateivariablen}
begin
if PrintDialog1.Execute then
begin
AssignPrn(PrintText); {Zuweisung von PrintText an den Drucker}
Rewrite(PrintText); {Erzeugen und Öffnen der Ausgabedatei}
Printer.Canvas.Font := Memo1.Font;{Zuweisung der eingestellten Schriftart an die Leinwand}
for Line := 0 to Memo1.Lines.Count - 1 do

Writeln(PrintText, Memo1.Lines[Line]); {Schreiben des Inhalts von Memo1 in das Druckerobjekt}
CloseFile(PrintText); {Schließen der Druckervariablen}
end;
end;

Erstmal druckt der Code natürlich ein Memo aus, das ist mir klar. Außerdem brauchts noch den Printerdialog und einen Button.

Mein Problem ist jetzt: Das Programm macht nur FAST das, was ich will. Nach der bestätigung des Printer-Dialogs arbeitet der rechner kurz, die Anzeige des Druckertreibers erscheint für eine Sekunde und ist weg, ohne das was gedruckt worden wäre. Der Drucker funktioniert mit anderen Programmen einwandfrei.

Was mache ich falsch? danke und gruß, Jens.

Hallo. Ich habe ein bißchen in der Hilfe gestöbert, um eine
listbox auszudrucken und bin dabei auf folgende Lösung
gestoßen:

uses … printers;

procedure TForm1.Button1Click(Sender: TObject);
var
Line: Integer;
PrintText: TextFile; {Deklaration einer Dateivariablen}
begin
if PrintDialog1.Execute then
begin
AssignPrn(PrintText); {Zuweisung von PrintText an den
Drucker}
Rewrite(PrintText); {Erzeugen und Öffnen der
Ausgabedatei}
Printer.Canvas.Font := Memo1.Font;{Zuweisung der
eingestellten Schriftart an die Leinwand}
for Line := 0 to Memo1.Lines.Count - 1 do

Writeln(PrintText, Memo1.Lines[Line]); {Schreiben des
Inhalts von Memo1 in das Druckerobjekt}
CloseFile(PrintText); {Schließen der Druckervariablen}
end;
end;

Hallo,

dein Fehler ist, dass du eine Textfile gebrauchst.
Man greift auf den Drucker nicht mit einer Textfile zu, sondern mit einem system.text.

Die Lösung:
procedure …
var Printtext :system.text;
begin
assignPrn(PrintText);
Rewrite(PrintText);
writeln(PrintText,‚Hallo‘);
writeln(PrintText,‚Rechnungsbetrag: ‚,23.15:8:2,‘ DM‘);
system.close(PrintText);
end;

Ich hoffe, ich hab dir damit geholfen.

Gruß Thomas