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);
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
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)