Wie können Sie mehrere Seiten mit der Druckfläche drucken? Mit Lineto und Textout, um die Ausgabe auf der Leinwand zu erzeugen? Die Leinwand funktioniert auf einer einzelnen Seite einwandfrei. Dies verwendet den normalen Druck für die erste Seite. Dann verwendet copyrect den Druckerbereich und gibt eine neue Seite aus, aber die folgenden Seiten sind leer. Ich sah in einer Frage, dass sie über eine PrintPage sprachen. Ich habe mit Lazarus keine Funktion oder Methode wie diese gesehen. Hier ist ein Code, ich weiß nicht, ob es hilfreich ist.Drucken mehrerer Seiten mit Canvas-Funktionen LineTo und Textout
kBracketTree: with TestTableForSpeciesData, Printer.Canvas do
begin
intCPLngth := Origin.ttoBracket.Height * 5;
intCPWdth := Origin.ttoBracket.Width * 5;
if imgPrintView.Canvas = nil then
imgPrintView.Canvas.Create;
imgPrintView.Height := intCPLngth; // * 6 div 5;
imgPrintView.Width := intCPWdth; // * 6 div 5;
intVPages := intCPLngth div intHeight + 1;
intHPages := intCPWdth div intWidth + 1;
DrawScale(dblScale);
DrawBracket(HomeVrtcl);
DrawBracketLabel(Species[NodeCount].VrtclPosition, Species[NodeCount].EndSegment);
DrawBracketLabel(Species[NodeCount - 1].VrtclPosition, Species[NodeCount - 1].EndSegment);
intNdLvl := 1;
while boolMoreNodeLevels(intNdLvl) do
begin
for inx := 0 to NodeCount - 2 do
if Species[inx].NodeLevel = intNdLvl then
DrawBracketLabel(Species[inx].VrtclPosition, Species[inx].EndSegment);
inc(intNdLvl);
end;
if boolBootStrap then
for inx := SpeciesCount to NodeCount do
DrawBootStrapLabel(Species[inx].VrtclPosition, BSPercent[inx - SpeciesCount], 5, 5, 55);
if (intVPages > 1) or (intHPages > 1) then
begin
if intVPages > 1 then
if intHPages = 1 then
begin
intVStart := 2;
intHStart := 1;
end
else
begin
intVStart := 1;
intHStart := 2;
end
else
begin
intVStart := 1;
intHStart := 2;
end;
for iny := intVStart to intVPages do
begin
Pen.Color := clBlack;
Brush.Style := bsSolid;
Brush.Color := clWhite;
Clear;
with rctPrnt do
begin
Left := 0;
Top := 0;
if intCPLngth > intHeight * iny then
Bottom := intHeight - 1
else
Bottom := intCPLngth - intHeight * (iny - 1) - 1;
end;
with rctSlctd do
begin
Top := intHeight * (iny - 1);
if intCPLngth > intHeight * iny then
Bottom := intHeight * iny - 1
else
Bottom := intCPLngth;
end;
for inx := intHStart to intHPages do
begin
NewPage;
with rctPrnt do
if intCPWdth > intWidth * inx then
Right := intWidth - 1
else
Right := intCPWdth - intWidth * (inx - 1) - 1;
with rctSlctd do
begin
Left := intWidth * (inx - 1);
if intCPWdth > intWidth * inx then
Right := intWidth * inx - 1
else
Right := intCPWdth - 1;
end;
Canvas.Rectangle(0, 0, intWidth - 1, intHeight - 1);
Canvas.CopyRect(rctPrnt, imgPrintView.Canvas, rctSlctd);
Canvas.Refresh;
end;
intHStart := 1;
end;
end;
Produzieren Sie ein MCVE, das ein einzelnes Textwort druckt, eine neue Seite startet und es erneut ausführt. Wir wollen nicht durch den ganzen Code waten. Vereinfachen. –