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
public
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;
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.