2017-02-09 4 views
-1

Как вы можете печатать несколько страниц с использованием холста для печати. С 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; 
+0

Производите MCVE, который печатает одно слово текста, начинает новую страницу и делает это снова. Мы не хотим пробираться через весь этот код. Упрощать. –

ответ

0

В Lazarus класс TPrinter имеет метод NewPage. В Lazarus ctrl-click объявление TPrinter, чтобы увидеть все методы, доступные в исходном коде.

+0

Я получил MCVE для работы, рисуя четыре прямоугольника на битовой карте. Я помещаю дизайн внутри прямоугольников, таких как линии, квадраты и треугольники. Затем я смог рисовать каждый прямоугольник на отдельной странице с копией на холсте принтера, создавая новую страницу после первой страницы. Я изменил исходную программу и обнаружил, что создаю и отбрасываю бит-карту, чтобы установить высоту и ширину для холста. Теперь у меня есть печать черного прямоугольника на каждой странице. Я должен будет проверить изменение кистей и/или ручек. Но знаю, что я создал новую проблему при создании образа. продолжение ... –

+0

Печатное изображение в 5 раз больше исходного изображения. Если он становится очень большим, я получаю ошибки # 203. Благодарим вас за поддержку juus и David Heffernan –

Смежные вопросы