Quebra de pagina impressão Printer.canvas
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);
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
Curtidas 0