Quebra de pagina impressão Printer.canvas

Delphi

04/01/2018

Olá amigos.
Estou com um problema na quebra de página de impressão (Componente Printer.Canvas), estou imprimindo direto da stringgrid.
Meu problema ocorre quando tenho mais de uma pagina, ao fazer a quebra para próxima pagina ele está quebrando as colunas em nova paginas;
Estou calculando:
A área total de impressão: cAltura:=Printer.PageHeight - Printer.PageWidth;
A altura da linha: cAltLn:=Printer.Canvas.TextHeight(''''''''''''''''M'''''''''''''''');
e Maximo de linhas: MaxLine:=round(cAltura/cAltLn);

procedure TAprov.btnImprimirClick(Sender: TObject);
var X1, X2, Y1, Y2: Integer;
    vRow, vCol, countLn, MaxLine, cAltLn, cAltura: Integer;
    variable: String;
    TR: TRect;
begin
  Printer.Title := ''''''''''''''''Aprovadas Reprovadas'''''''''''''''';
  Printer.Orientation:=poLandscape;
  cAltura:=Printer.PageHeight - Printer.PageWidth;
  Printer.BeginDoc;
  {Printer Título}
  Printer.Canvas.Pen.Color  := 0;
  Printer.Canvas.Font.Size  := 10;
  Printer.Canvas.Font.Style := [fsBold];
  Printer.Canvas.TextOut(80, 120, Printer.Title);
  {Printer Dados}
  Printer.Canvas.Font.Style := [];
  Printer.Canvas.Font.Size := 7;
  cAltLn:=Printer.Canvas.TextHeight(''''''''''''''''M''''''''''''''''); //altura da linha
  MaxLine:=round(cAltura/cAltLn); 	      //calcula número máximo de linhas

  countLn:=0;
  for vRow := 0 to sGrid.ColCount - 1 do
  begin
    X1 := 4;
    for vCol := 0 to (vRow - 1) do
    begin
      if vCol = 5 then
       X1 := X1
      else
       X1 := X1 + 5 * (sGrid.ColWidths[vCol]);
    end;
    Y1 := 200;
    X2 := 0;
    {Descrição Colunas}
    for vCol := 0 to vRow do
      X2 := X2 + 5 * (sGrid.ColWidths[vCol]);
    Y2 := 450;
    TR := Rect(X1, Y1, X2 - 10, Y2);

    {Dados do GRID}
    for vCol := 0 to (sGrid.RowCount - 1) do
    begin
      Y1 := 100 * vCol + 300;
      Y2 := 150 * (vCol + 1) + 300;
      TR := Rect(X1, Y1, X2 - 30, Y2);
      Printer.Canvas.TextRect(TR, X1 + 50, Y1 + 50, sGrid.Cells[vRow, vCol]);
    end;
    {Quebra de pagina}
    if countLn > MaxLine then
    begin
      Printer.NewPage; {nova pagina}
      countLn:=0;
    end;
    Inc(countLn);
    Memo2.Lines.Add(''''''''''''''''Ln: ''''''''''''''''+IntToStr(countLn)); //Visualizar numero de Linhas
  end;
  Printer.EndDoc;
end;
Dan Melo

Dan Melo

Curtidas 0
POSTAR