Как вы можете печатать несколько страниц с использованием холста для печати. С lineto и textout для вывода вывода на холст? Полотно отлично работает на одной странице. Это используется для обычной печати для первой страницы. Затем использовалась копия на холсте принтера и вышла новая страница, но последующие страницы пустые. Я видел в одном вопросе, что они говорили о PrintPage, я не видел функцию или метод, подобные этому с Lazarus. Вот какой код я не знаю, если это полезно.Печать нескольких страниц с помощью функций холста LineTo и 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;
Производите MCVE, который печатает одно слово текста, начинает новую страницу и делает это снова. Мы не хотим пробираться через весь этот код. Упрощать. –