Hallöchen!
Zurzeit versuche ich diverse Informationen meines Projektes zu drucken was tadellos funktioniert.
ALLERDINGS ist egal wieviele Zeilen vorhanden sind, er bedruckt nur eine Seite und dann ist der druckvorgang beendet...
Ich habe entweder hier im Forum oder auf einer anderen plattform folgenden Code benutz.
Delphi-Quellcode:
procedure TfMainRechner.TBItem1Click(Sender: TObject);
var i, lPageLine, lLineHeight, lLineCount: integer;
begin
c:=0;
if PrintDialog1.Execute then begin
Printer.BeginDoc;
Printer.Canvas.Font.Name := 'Arial';
Printer.Canvas.Font.Size := 11;
lLineHeight := Printer.Canvas.TextHeight('Dummy');
lLineCount := Printer.PageHeight div lLineHeight;
for i := 0 to Memo1.Lines.Count -1 do
begin
if ((i mod lLineCount) = 0) then
begin
Printer.NewPage;
lPageLine := 1;
end;
if (i = 0) then
begin
////////////Angaben zur Tabelle
Printer.Canvas.TextOut(50,lPageLine * lLineHeight+1500+25, 'TABELLENWERTE');
Printer.Canvas.TextOut(50,lPageLine * lLineHeight+1575+25, 'Nr.');
Printer.Canvas.TextOut(550,lPageLine * lLineHeight+1575+25, 'datum');
Printer.Canvas.TextOut(1050,lPageLine * lLineHeight+1575+25, 'XXXX');
Printer.Canvas.TextOut(1550,lPageLine * lLineHeight+1575+25, 'XXXX');
Printer.Canvas.TextOut(2050,lPageLine * lLineHeight+1575+25, 'XXXX');
inc(lPageLine);
end;
Printer.Canvas.TextOut(50, lPageLine * lLineHeight + 1625+25, MemoNr.Lines[i]);
Printer.Canvas.TextOut(550, lPageLine * lLineHeight + 1625+25, Memo1.Lines[i]);
Printer.Canvas.TextOut(1050, lPageLine * lLineHeight + 1625+25, Memo2.Lines[i]);
Printer.Canvas.TextOut(1550, lPageLine * lLineHeight + 1625+25, Memo3.Lines[i]);
Printer.Canvas.TextOut(2050, lPageLine * lLineHeight + 1625+25, Memo4.Lines[i]);
inc(lPageLine);
end;
Printer.EndDoc;
end;
end;
HAb mir überlegt es mit einer if abfrage zu definieren wenn i > 35 ist dann soll er eine neue seite benutzen. Allerdings ist ab i:=35 jeder durchlauf > 35 und es werden "millionen" Blattserien eingezogen.
Hat jemand eine idee?