Ver Mensaje Individual
  #5  
Antiguo 01-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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

      //Define desde que página comenzará la impresión
...

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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita