Hi!
Kleiner Fehler in meiner Source!
Man sollte abfragen ob die ListBox LEER ist! Sonst macht der Drucker ein FormFeed und druckt ein leeres Blatt aus. Is mir nicht aufgefallen weil in meinem Beispiel die ListBox ja nit grad leer war, HiHi!
Wir müßen nur eine Zeile einfügen, direkt am Anfang:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Printers;
type
TForm1 =
class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
Procedure PrintListBox(ListBox: TListBox);
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
PrintListBox(ListBox1);
end;
Procedure TForm1.PrintListBox(ListBox: TListBox);
Var
I,LinesPerPage,Count,FontHeight:Cardinal;
Begin
// Neue Zeile!
If Listbox.Items.Count=0
then Exit;
With Printer
do Begin
Canvas.Font.Assign(ListBox.Font);
FontHeight:=Canvas.TextHeight('
X');
LinesPerPage:=PageHeight
div FontHeight;
BeginDoc;
Count:=0;
For I:=0
to ListBox.Items.Count-1
do Begin
Canvas.TextOut(0,Count*FontHeight,ListBox.Items[I]);
Inc(Count);
If Count=LinesPerPage
then Begin
Count:=0;
NewPage;
End;
End;
EndDoc;
End;
End;
end.
Man könnte noch ein PrinterDialog einführen mit dem der Benutzer zwischen Hoch- und Quer-Format wählen kann.
Freut mich, wenn ich Dir helfen konnte!
Grüße von TOC!