Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Liberar componente. (https://www.clubdelphi.com/foros/showthread.php?t=5359)

setry2 19-11-2003 12:06:00

Liberar componente.
 
Hola a todos. Tengo un componente para realizar búsquedas sobre una tabla, que es visual. Lo arrastro a un Form, y ejecuto la aplicación. Abro ese form, ejecuto la búsqueda y si cierro el form, la pantalla de búsqueda que se crea se mantiene abierta todavía. Pensaba que al arrastrar el componente, el owner pasaba a ser el form al que lo arrastro, ¿es esto asi? Se que el owner se especifica en el Create, pero al ser visual, lo crea el form. Creo que hay algo que se me escapa...

Muchas gracias de antemano.

Descendents 19-11-2003 12:55:39

mira si el componente tiene un free oa algo.

Si lo tiene en el onclose del form pon
componente.free;

setry2 19-11-2003 13:05:11

Cita:

Descendents comentó:
mira si el componente tiene un free oa algo.

Si lo tiene en el onexit del form pon
componente.free;

El componente es mio. Si, podría crear un evento que cerrara el form y lo liberara, pero pensaba que al arrastrarlo al form era este el encargado de cerrarlo y liberarlo. ¿es realmente así? Me gustaría encontrar otra solución más rápida que liberarlo explicitamente, porque en un form tengo una media de 20 de estos componentes.

Venga, un saludo.

delphi.com.ar 19-11-2003 14:44:13

Tendrías que sobreescribir el destructor del archivo, y desde ahí si la pantalla esta abierta, cerrarla y liberarla.
Código:

  TMiComponente = class(TComponent)
  private
    FDialog: TFrmDialog;
  public
    destructor Destroy; override;
  end;

...

implementation

destructor TMiComponente.Destroy;
begin
  if Assigned(FDialog) Then
    FDialog.Free;

  inherited;
end;

Saludos!

delphi.com.ar 19-11-2003 14:45:30

Cita:

setry2 comentó:
..Abro ese form, ejecuto la búsqueda y si cierro el form, la pantalla de búsqueda que se crea se mantiene abierta todavía...
Cuando cierras el form... ¿Lo liberas?

setry2 19-11-2003 15:28:46

Cita:

delphi.com.ar comentó:
Cuando cierras el form... ¿Lo liberas?
En el close del form pongo el action a caFree y libero las qry's que puedan quedar abiertas hasta ese momento. Tengo que cerrar explicitamente desde el form la pantalla generada por el componente, verdad? en el close del form.

Muchas gracias.

delphi.com.ar 19-11-2003 15:37:14

¿Has leído mi mensaje anterior?...
Tu componente tiene como owner el form que lo contiene, cuando este form se libere va a liberar tu componente, en mi mensaje anterior puedes ver como aprovecho de la "notificación" de liberación para liberar el formulario de búsqueda. De todos modos si el Owner del formulario de búsqueda es el componente, este se encargará de liberar el formulario cuando se libere este componente, por lo tanto se cerrará.

Saludos!

setry2 19-11-2003 16:33:06

Cita:

delphi.com.ar comentó:
De todos modos si el Owner del formulario de búsqueda es el componente, este se encargará de liberar el formulario cuando se libere este componente, por lo tanto se cerrará.

Ese era el problema, que el Owner del formulario era application en vez de self. Vaya, que fallo más tonto.

Bueno, muchísimas gracias por tu ayuda.

Un saludo.


La franja horaria es GMT +2. Ahora son las 19:37:49.

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