Hola!!!
La form que tiene el qreport se genera desde que se carga el proyecto, y esta forma la mando llamar desde otra forma que tengo que es form_opcion(en esta forma aparecen dos botones los cuales son: capturar datos o ver reporte), y cuando le das clic en ver reporte utilizo esto:
Código Delphi
[-]
procedure Tform_opcion.btnversolicitudClick(Sender: TObject);
begin
frm_reporte2.show;
y en la frm_reporte2 en la propiedad OnShow manejo lo que es la creacion de las labels
Código Delphi
[-]
procedure Tfrm_reporte2.FormShow(Sender: TObject);
Var
b : Boolean;
fol : String[9];
cont, arriba, izq, campos,registros : Integer;
begin
arriba :=0;
izq :=10;
cont :=0;
registros :=0;
campos :=0;
if (form_opcion.label1.Caption[1] = 'T') then
Begin
b := modulotablas.tbltextil.Locate('LabFolio', form_opcion.label1.caption, [locaseInsensitive]);
if (b) then
Begin
frm_reporte2.qrlaboratorio.Caption := frm_reporte2.qrlaboratorio.Caption + ' Textil';
frm_reporte2.qrmlblfecha.Caption := modulotablas.tbltextil.FieldByName('Fecha').value;
frm_reporte2.qrmlblfolio.Caption := modulotablas.tbltextil.FieldByName('LabFolio').value;
frm_reporte2.qrmlblsolicitante.Caption := modulotablas.tbltextil.FieldByName('Solicitante').value;
frm_reporte2.qrmlbltipomuestra.Caption := modulotablas.tbltextil.FieldByName('Tipo_muestra').value;
frm_reporte2.qrmlbldeptosol.Caption := modulotablas.tbltextil.FieldByName('Depto_sol').value;
frm_reporte2.qrmlblpruebasol.Caption := modulotablas.tbltextil.FieldByName('Pruebas').value;
frm_reporte2.qrmlblobjetivo.Caption := modulotablas.tbltextil.FieldByName('Objetivo_trab').value;
frm_reporte2.qrmlblfechaent.Caption := modulotablas.tbltextil.FieldByName('Fecha_ent').value;
modulotablas.resul_textil.First;
fol := modulotablas.resul_textil.FieldByName('LabFolio').value;
cont := 1; while fol <> form_opcion.label1.Caption do
Begin
modulotablas.resul_textil.Next;
fol := modulotablas.resul_textil.FieldByName('LabFolio').value;
end;
if ((fol = form_opcion.label1.Caption) and (registros < modulotablas.resul_textil.RecordCount)) then
Begin
if (cont <= modulotablas.resul_textil.FieldCount-2) then
Begin
while campos < modulotablas.resul_textil.FieldCount-1 do
Begin
if modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName).value <> 'x' then
Begin
lab := TQRlabel.Create(QRBResultados); lab.Top := arriba;
lab.Left := izq;
lab.Caption := modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName;
lab.Parent := frm_reporte2.QRBResultados;
izq := izq + 5 + FontWidth(lab.Font,lab.Caption);
cont := cont+1;
campos := campos +1;
end else
Begin
cont := cont+1;
campos := campos +1;
end;
end; modulotablas.resul_textil.Next;
end end;
end else
ShowMessage ('No se encuentra el folio solicitado');
end; frm_reporte2.QuickRep1.Preview; <----- PREVIEW
form_opcion.Hide;
en este caso manejo el mismo procedimiento para mostrar el reporte la 1a vez que la 2a y 3a, etc...
Ahora para destruir los labels lo hago despues del AfterPreview
Código Delphi
[-]
procedure Tfrm_reporte2.QuickRep1AfterPreview(Sender: TObject);
var
contlabels : Integer;
begin
frm_reporte2.Hide; contlabels := frm_reporte2.QRBResultados.ComponentCount; while contlabels > 0 do Begin
frm_reporte2.QRBResultados.Components[contlabels-1].Free;
contlabels:= frm_reporte2.QRBResultados.ComponentCount;
end; frm_reporte2.qrlaboratorio.Caption := 'Laboratorio ';
frmana.show;
end;
Espero que me hayan entendido
Les doy las gracias por tomarse el tiempo de revisar mi codigo.
Gracias
Cómo te sientes hoy?