Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   erro al cerrar segundo preview mdichild (https://www.clubdelphi.com/foros/showthread.php?t=65345)

amurrieta 07-12-2009 21:28:50

erro al cerrar segundo preview mdichild
 
Hola foro, estoy abriendo varias ventanas de reportes con quickreport desde una forma mdi por lo cual mis preview son mdichild. La idea es que el usuario pueda abrir varias ventanas del mismo reporte con parámetros diferentes y poder comparar. Los abro bien y varias veces, el problema es cuando intento cerrar la segunda ventana, me manda error de access violations, supongo que al cerrar el primero cierro los demas aunque sigan visibles o no se que estoy haciendo mal. La forma de abrir los reportes es la siguiente:

Código Delphi [-]
...
 If not Assigned(RptCte) then
 Begin
      RptCte := TRptCte.create(FPrincipal)
 End;

 RptCte.Preview;
...

Estaba poniendo el free después de abrirlos y lo quité pensando que los liberaba antes de cerrarlos pero aún así no me ha funcionado. Supongo que debería crear una instancia por cada llamda de reporte pero no se si sea lo correcto o como lo tendría que hacerlo.

Gracias por su ayuda..

rgstuamigo 08-12-2009 00:15:28

Si lo dejas asi como estas ,pues te cuento que se te va ir llenando la memoria mas y mas ,por la sencilla razon de que no estas liberando los objetos creados.;)
Por otro lado si abres el reporte en forma Modal,y luego lo destruyes, pues ya no vas a poder abrir (y comparar segun lo que comentas) otro reporte, mientras tengas alguno abierto o estado de Previsualizacion.:rolleyes:... asi que lo unico que se me ocurre que puedas hacer es Personalizar tu reporte;), es decir mostrarlo en un formulario diseñado por ti mismo, para que puedas usar el evento OnClose del mismo y decirle a Delphi que destruya el formulario al cerrarlo.;)
Código Delphi [-]
procedure MyFormPersonalizado.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;//Hago que se destruya el formulario.
end;
De esa manera podrias abrir el formulario en forma normal(no modal)y evitarias las Fugas de memoria.;)
Saludos...:)

amurrieta 08-12-2009 20:41:19

Oka, he hecho lo que propones de meter el preview en un formulario y hasta ahí todo bien, he reutilizado el reporte elaborado y sólo en el evento onpreview le mando el qrprinter al objeto preview de la forma para que al mostrar el preview del reporte se muestre en el preview personalizado. Ahora mi problema es cuando quiero volver a lanzar el formulario, ya que como lo había planteado, la idea es que el cliente pueda ver el mismo reporte en diferentes ventanas para comparar datos pues al intentar volver a mostrar el formulario me dice que ya existe y no me deja crearlo. Cómo hago para poder abrir varios formularios sin que me mande error y que se abran en diferentes ventanas, no sólo que se muestren en el formulario que ya se abrió previamente. Lo que tengo en código es:

Código Delphi [-]
...
procedure TFPrincipal.TestFormClick(Sender: TObject);
Var
 formatest : TFormReporte; // formulario Reporte
begin

      formatest := TFormReporte.Create(fprincipal);

      If not Assigned(Reporte) then
      Begin
         Reporte := TReporte.create(self) //QuickReport
       End;
         Reporte.Preview;

      formatest.Show;
End;
...

Qué estoy haciendo mal? cómo puedo abrir varias ventanas del mismo formulario?


La franja horaria es GMT +2. Ahora son las 15:39:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi