Drucker druckt nur eine Seite
Hallo,
ich arbeite zur Zeit an einem Programm, um eine Rangliste zu verwalten. Unter anderem habe ich vor, diese auszudrucken. Dazu benutze ich folgende Prozedur:
Delphi-Quellcode:
Ich habe sie ein bisschen vereinfacht (ListBox1 anstatt Listview mit Subitems).
procedure Drucken;
var I: Integer; X, Y: Integer; Breite, Hoehe, Randlinks, Randoben: Integer; begin if PrintDialog1.Execute then with Printer do begin BeginDoc; SetMapMode(Canvas.Handle,MM_LOMETRIC); // 1/10 mm with Canvas do begin with Font do begin Name := 'Courier New'; Height := 50; end; Breite := GetDeviceCaps(Handle,HORZSIZE) * 10; Hoehe := GetDeviceCaps(Handle,VERTSIZE) * 10; Randlinks := 100; Randoben := 200; Y := -Randoben; for I := 0 to ListBox1.Items.Count-1 do begin if -Y > (Hoehe - 2 * Randoben) then begin NewPage; // funktioniert nicht Y := -Randoben; end; TextOut(X,Y,ListBox1.Items[I]); Y := Y - TextHeight(ListBox1.Items[I]); end; end; EndDoc; end; end; Die erste Seite wird besstens gedruckt, aber seit ich "MapMode" auf MM_LOMETRIC gesetzt habe, werden alle weiteren Seiten leer ausgeworfen. An was könnte das denn liegen? |
Re: Drucker druckt nur eine Seite
Hallo,
warum hast du die Druckroutine "hardcodiert". Mach es doch mit Quickreport. Man braucht für Quickreport nicht unbedingt eine Datenbank. Meine Fehlerreports drucke ich auch mit Quickreport. Dies hat einige Vorteile. Quickreport kümmert sich selbst um Papierformat, Seitengröße etc. Und ich kann die Position der Ausgabezeile recht einfach auf einem Report platzieren. Entscheidend ist dass das onNeeddata-Ereignis überschrieben wird. Solange moredata=true ist macht Quickreport weiter, sobald moredata=false ist wird die Ausgabe beendet. Mit Quickreport könnte dein Source dann etwa so aussehen:
Code:
Probiers mal aus.
var i : integer;
procedure TQRDrucken.QRDruckenBeforePrint(Sender: TQuickRep; var PrintReport: Boolean); begin i:=0; end; procedure TQRDrucken.QRLabel1Print(sender: TObject; var Value: String); begin value:=Form1.ListBox1.Items[i]; end; procedure TQRDrucken.QRDruckenNeedData(Sender: TObject; var MoreData: Boolean); begin moreData:=true; if i>Form1.ListBox1.Items.Count then begin moredata:=false; end; inc(i); end; Gruß Horst :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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