Ver Mensaje Individual
  #2  
Antiguo 14-04-2005
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Reputación: 21
mlara Va por buen camino
Solución!!!

Jajajaj... casi que no, y así de fácil. Les cuento: pude dar solución al punto uno. Aquí está:

Tengo una forma con un Edit, un Button, y el QRCompositeReport, y por otro lado un reporte muy simple con una banda tipo rbTitle y un QRLabel sobre la misma.

Aquí está la forma:


Código Delphi [-]
type
  TfMaestro = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    QRCompositeReport1: TQRCompositeReport;
    procedure BeforePrint(Sender: TCustomQuickRep;
      var PrintReport: Boolean);
    procedure QRCompositeReport1AddReports(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
, y aquí el reporte:


Código Delphi [-]
type
  TrUno = class(TQuickRep)
    QRBand1: TQRBand;
    QRLabel1: TQRLabel;
  private

  public

  end;
Ahora, en el Edit1 simplemente escribo el número de reportes que quiero imprimir (en este ejemplo hasta 10 máximo). El programa creará ese mismo número de instancias y las mostrará en el CompositeReport en páginas diferentes. Para Imprimir sólo doy click en el Button1. Aquí está el código:


Código Delphi [-]
procedure TfMaestro.BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
  Sender.NewPage;
end;

procedure TfMaestro.QRCompositeReport1AddReports(Sender: TObject);
var
  I: Integer;
  rUno: array [1..10] of TrUno;
begin
  for I := 1 to StrToInt(Edit1.Text) do begin
    rUno[i] := TrUno.Create(fMaestro);
    rUno[i].QRLabel1.Caption := rUno[i].QRLabel1.Caption+' '+IntToStr(I);
    rUno[i].Name := 'rUno'+IntToStr(I);
    if I > 1 then begin
      rUno[i].BeforePrint := BeforePrint;
      rUno[i].Units := MM;
      rUno[i].Page.TopMargin := 100;
    end;
    QRCompositeReport1.Reports.Add(rUno[i]);
  end;
end;

procedure TfMaestro.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  QRCompositeReport1.Preview;
  // Libera reportes
  I := 1;
  while FindComponent('rUno'+IntToStr(I)) <> nil do begin
    FindComponent('rUno'+IntToStr(I)).Free;
    Inc(I);
  end;
end;
Y listo!

Me he dado cuenta de que algunas personas han preguntado precisamente cómo hacer esto, así que espero les sirva.

Ahora, alguien podría colaborarme con el punto dos? Podría ser muy útil.

Gracias.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.

Última edición por mlara fecha: 14-04-2005 a las 05:54:38.
Responder Con Cita