2017-02-09 1 views
-1

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; 
+0

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. –

Antwort

0

In Lazarus hat die TPrinter-Klasse eine Methode namens NewPage. Klicken Sie in Lazarus ctrl-click auf eine TPrinter-Deklaration, um alle im Quellcode verfügbaren Methoden anzuzeigen.

+0

Ich habe die MCVE zu arbeiten, indem Sie vier Rechtecke auf der Bitmap zeichnen. Ich lege ein Design in die Rechtecke wie Linien, Quadrate und Dreiecke. Dann war ich in der Lage, jedes Rechteck auf einer separaten Seite zu zeichnen, wobei eine Kopie auf der Leinwand des Druckers eine neue Seite nach der ersten Seite ausgab. Ich habe das ursprüngliche Programm geändert und festgestellt, dass ich die Bitmap erstellt und gewirkt habe, um Höhe und Breite für die Leinwand festzulegen. Ich drucke jetzt auf jeder Seite ein schwarzes Rechteck. Ich muss testen, die Pinsel und/oder Stifte zu ändern. Aber ich weiß, dass ich ein neues Problem erstellt habe, als es ein Bild erstellt. Fortsetzung .... –

+0

Das druckbare Bild ist 5-mal so groß wie das Originalbild. Wenn es überhaupt sehr groß wird, bekomme ich # 203 Fehler. Danke für deine Unterstützung, Juus und David Heffernan –