PDA

Ver la Versión Completa : QuickReport y creacion de paginas en tiempo de ejecución


Torreblanca
13-12-2007, 22:06:23
Necesito hacer un reporte en quickReport tomando como fuente dos listbox normales sin conexión a bases de datos. En el formulario de QuickReport tengo un pageheader, un detail band y un pagefooter. Creo los QrLabels en tiempo de ejecución de la sig. manera

Código Delphi [-] (http://www.clubdelphi.com/foros/#) procedure TFrmChofer.Button3Click(Sender: TObject);
var y : integer;
begin
conteo:=FrmChofer.ListBox1.Count;
tp:=45; // top del qrLabel dentro del detail band
for y:=1 to conteo do
begin lblNombre:=TQRLabel.Create(self); lblNombre.Parent:=FrmRepAbrevChofer.QRBand2; lblNombre.Top:=tp; lblNombre.Left:=10; lblNombre.Width:=50; lblNombre.Caption:=FrmChofer.ListBox2.Items[y-1]; lblNorm:=TQRLabel.Create(self); lblNorm.Parent:=FrmRepAbrevChofer.QRBand2; lblNorm.Top:=tp; lblNorm.Left:=210; lblNorm.Width:=100; lblNorm.Caption:=FrmChofer.ListBoxPromNorm.Items[y-1]; End;


Lo que he intentado y no me ha salido es imprimir 10 registros en cada pagina del Qreport, pero le he intentado con las propiedades del detail band como ForceNewPage y la propiedad del Qreport NewPage y ninguna me da resultados

algo asi intento


Código Delphi [-] (http://www.clubdelphi.com/foros/#) if y > 10 then
begin
FrmRepAbrevChofer.QuickRep1.NewPage;
FrmRepAbrevChofer.QRBand2.ForceNewPage:=true;
end;

Alguien me puede dar una idea o alguna forma para resolver este dilema :confused:

De antemano les agradesco su apoyo

Saludos!!!

afxe
14-12-2007, 09:42:33
No está muy claro tu problema, pero creo que te he entendido. Intenta esto:
Declaras dos variables privadas, una vIndice y otra vContador. En el evento BeforePrint del QuickReport pones vIndice a cero y en el eveto onStartPage incializas vContador a cero.

Usa el evento OnNeedData para incrementar vIndice e ir accediendo a los elementos del ListBox, poniendo MoreData a False cuando llegues al final de la lista.

En el evento AfterPrint de la banda de detalle incremetas vContador, y si vContador llega a 10 entonces llamas al método Newpage (QuickRep1.NewPage) .

Puedes tener creado los qrlabels en tiempo de diseño, y si quieres ocultar alguno para que no se imprima usa la propiedad enabled del qrlabel en el evento BeforePrint de la banda.

Saludos.

Torreblanca
19-12-2007, 05:49:44
Gracias afxe, no habia tenido tiempo para responder, probe la solución que me ofreciste, pero creo que hay algo mal en mi aplicación por que la logica es la correcta pero a la hora de implementarlo no mas no sale. Creo que he desistido de usar QuickReport para este reporte por lo menos, le encontre la solución usando comandos de Rave Reports. Te agradesco la atención para contestar a mi pregunta.

Saludos!!!

Adjunto el pedazo de código con el que resolví mi problema en Rave Reports para futuras consultas.


procedure TFrmChofer.RvSystem1Print(Sender: TObject);
var
y, x : integer;
begin
with Sender as TBaseReport do
begin
x:=FrmChofer.ListBoxChofer.Count;
y:=1;
tp:=1.3; //tp es el top de la hoja del reporte
SetFont('Arial', 15);
GotoXY(1,1);
PrintCenter('Reporte de choferes',4);
SetFont('Arial', 8);
for y:=1 to x do
begin
GotoXY(0.5,tp);
Print(FrmTotalesChofer.ListBoxChofer.Items[y-1]); // Nombre chofer
GotoXY(2,tp);
Print(FrmTotalesChofer.ListBoxPromNorm.Items[y-1]); //Boletos Normales
Print(FrmTotalesChofer.ListBoxPromTotal.Items[y-1]); //Suma Ventas
GotoXY(7,tp);
tp:=tp+0.3;

if tp >=12 then //Empieza en una nueva pág. cuando llega a este punto
begin
NewPage;
SetFont('Arial', 15);
GotoXY(1,1);
PrintCenter('Reporte abreviado de choferes',4);
SetFont('Arial', 8);
tp:=1.3;
end;
end;
end;
end;