GARANTIR DESCONTO

Fórum Quebra de pagina impressão Printer.canvas #590259

04/01/2018

0

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

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar