Hola Dexter182.
Creo que el problema radica en que llamas al
TPrintDialog después de haber asignado valores de la impresora asignada. Ejemplo:
Código Delphi
[-]
...
AltRenglon := Printer.Canvas.TextHeight('H') + (Printer.Canvas.TextHeight('H') * 0.2);
...
If PrintDialog.Execute then begin
...
Te pongo este código (el tuyo con algunos cambios) para que lo pruebes:
Código Delphi
[-]
procedure TForm1.Imprimir(PD: TPrintDialog; SG: TStringGrid; ED: TEdit);
var
AltRenglon: Single;
CantRenglon,Paginas, Fila, i, Y: Integer;
begin
with Printer do
begin
AltRenglon := Canvas.TextHeight('H') + (Canvas.TextHeight('H') * 0.2);
CantRenglon := Round(PageHeight / AltRenglon) - 7;
if SG.RowCount - 1 > CantRenglon then
Paginas := Ceil((SG.RowCount - 1) / CantRenglon)
else
Paginas := 1;
if PD.FromPage <= 1 then
Fila := 1
else
Fila := ((PD.FromPage - 1) * CantRenglon) + 1;
BeginDoc;
try
while Fila < SG.RowCount do
begin
Canvas.Font.Name := 'Arial';
Canvas.Font.Size := 10;
Canvas.Font.Style := [fsBold, fsUnderline];
Canvas.TextOut(80, Round(AltRenglon * 2), 'Descripción');
Canvas.TextOut(Round(PageWidth * 0.68) - Canvas.TextWidth('Cant.'),
Round(AltRenglon * 2), 'Cantidad');
Canvas.TextOut(Round(PageWidth * 0.83) - Canvas.TextWidth('Precio'),
Round(AltRenglon * 2), 'Precio');
Canvas.TextOut(PageWidth - 80 - Canvas.TextWidth('Subtotal'),
Round(AltRenglon * 2), 'Subtotal');
Canvas.MoveTo(0, Round(AltRenglon * 2.5));
Canvas.Font.Style := [];
for i := 1 to CantRenglon do
begin
Y := Canvas.PenPos.Y + Round(AltRenglon);
Canvas.TextOut(80, Y, SG.Cells[1, Fila]);
Canvas.TextOut(Round(PageWidth * 0.68) - Canvas.TextWidth(SG.Cells[2,Fila]),
Y, SG.Cells[2,Fila]);
Canvas.TextOut(Round(PageWidth * 0.83) - Canvas.TextWidth(SG.Cells[3,Fila]),
Y, SG.Cells[3,Fila]);
Canvas.TextOut(PageWidth - 84 - Canvas.TextWidth(SG.Cells[4,Fila]),
Y, SG.Cells[4,Fila]);
Fila := Fila + 1;
end;
Canvas.Font.Style := [fsBold];
Canvas.TextOut(80, PageHeight - Round(AltRenglon * 2 ),
'Hoja Nº ' + IntToStr(PageNumber));
Canvas.Font.Size := 14;
Canvas.TextOut(PageWidth - 80 - Canvas.TextWidth('TOTAL: ' + ED.Text),
PageHeight - Round(AltRenglon * 2 ), 'TOTAL: '+ED.Text);
if PageNumber < Paginas then
NewPage;
end;
finally
EndDoc;
end;
end;
end;
Llamada de prueba:
Código Delphi
[-]
procedure TForm1.btnImprimirClick(Sender: TObject);
begin
if PrintDialog1.Execute then
Imprimir(PrintDialog1, StringGrid1, Edit1);
end;
Saludos
