Ver Mensaje Individual
  #17  
Antiguo 13-10-2005
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Reputación: 19
david duarte Va por buen camino
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;
 //  long : 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; //cont1 se utiliza para manejar el ciclo del numero de muestras del pre
       while fol <> form_opcion.label1.Caption do
       Begin
         modulotablas.resul_textil.Next;
         fol := modulotablas.resul_textil.FieldByName('LabFolio').value;
       end;
       {ciclo para mostrar los analisis que seleciono el usuario}
       if ((fol = form_opcion.label1.Caption) and (registros < modulotablas.resul_textil.RecordCount)) then
       Begin
         {si contador es menot que los campos que tiene la base de datos}
         if (cont <= modulotablas.resul_textil.FieldCount-2) then
         Begin
           {mientras campos sea menot que fieldcount}
           while campos < modulotablas.resul_textil.FieldCount-1 do
           Begin
             {si modulotablas en el campo de contados esta seleccionado entonces}
             if modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName).value <> 'x' then
             Begin
               lab := TQRlabel.Create(QRBResultados); //se crea la label en el QRBResultados
               lab.Top := arriba;
               lab.Left := izq;
               lab.Caption := modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName;
 //              long := length( 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 //modulotablas.resul_textil.FieldByName(modulotablas.resul_textil.FieldDefs.Items[cont].DisplayName).value <> 'x' then
             else
             Begin
               cont := cont+1;
               campos := campos +1;
             end;
           end; //while campos < modulotablas.resul_textil.FieldCount-1 do
           modulotablas.resul_textil.Next;
         end //if (cont1 <= modulotablas.tbltextil.FieldByName('Num_muestras').value) then
       end; //while ((fol = label1.Caption) and (modulotablas.resul_textil.
 
 end //if (b) then
     else
       ShowMessage ('No se encuentra el folio solicitado');
   end; //if (label1.Caption[1] = 'T') then
   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; //ocultamos la forma donde se encuentra el reporte
   contlabels := frm_reporte2.QRBResultados.ComponentCount;// contamos los componentes en este caso son las labels
   while contlabels > 0  do// ciclo para liberar las labels
   Begin
     frm_reporte2.QRBResultados.Components[contlabels-1].Free;
     contlabels:= frm_reporte2.QRBResultados.ComponentCount;
   end; //while contlabels > 0  do
   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?

Última edición por david duarte fecha: 13-10-2005 a las 21:08:44. Razón: Por error
Responder Con Cita