Foros Club Delphi

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

delphi.com.ar 16-01-2004 13:35:16

Cita:

Empezado por Descendents
Y creo que la penultima pregunta que hice lo de la linea milagrosa, es que no se le debe asignar el parent en el momento de la destrucción

Así es!

Cita:

Empezado por Descendents
como existen estos mensajes de windows

Justo los mensajes que has nombrado no son propios de Windows, utilizan el sistema de mensajes de Windows, pero son mensajes propios de la VCL.

Bueno... vemos como te has contestado solo, eso significa que primero es conveniente investigar un poco y luego preguntar, aclaro que no te estoy recriminando nada, bien sabes que siempre te he contestado de buena gana ;) , solo para que lo tengas en cuenta!

Saludos!

Descendents 16-01-2004 13:58:32

Estoy totalmente de acuerdo contigo y creo que haces muy bien en decirlo, pero a veces la desesperación en algo, hace cometer estos errores.

Muchas gracias.

marto 16-01-2004 14:13:03

Hola a todos,

Pues yo no entiendo por qué la "linea milagrosa" soluciona el problema. Traduciendo a pseudocódigo el de Delphi.com.ar ...

Código:

procedure Tedit2.MeAsignanElParent(AParent: TWinControl);
begin
  inherited;
  if not (me están destruyendo) then
    FBoton.Parent := AParent;
end;

Es decir, si me están destruyendo, no asignes mi parent al del botón. ¿Qué tenemos que deducir de eso? que cuando TForm destruye a los Componets les cambia la propiedad Parent (y por eso se dispara el método)?

Otra cosa que no entiendo es ¿por qué el form ha destruído al Button? El Button forma parte del array Controls no de Components, ¿TForm tambien se encarga de destruir a Controls?

Finalmente en lugar de conprobar que no se esté destruyendo el componente, no os parece más elegante comprobar que el boton esté "assigned"??

delphi.com.ar 16-01-2004 14:30:43

Cita:

Empezado por marto
Es decir, si me están destruyendo, no asignes mi parent al del botón.

Esa es la idea!


Cita:

Empezado por marto
¿Qué tenemos que deducir de eso? que cuando TForm destruye a los Componets les cambia la propiedad Parent (y por eso se dispara el método)?.

En el TControl.Destroy se asigna el Parent a Nil, esto produce que se dispare este método cuando se está destruyendo el componente, despues de hacer el FButton.Free según el código original.


Cita:

Empezado por marto
Otra cosa que no entiendo es ¿por qué el form ha destruído al Button?

En el destructor de los TWinControl se destruyen todos los componentes hijos, relacionados por el parent (Controls)


Cita:

Empezado por marto
Finalmente en lugar de conprobar que no se esté destruyendo el componente, no os parece más elegante comprobar que el boton esté "assigned"??

Bueno.. el código original completo lo había hecho con assigned, pero el problema es que el owner destruye antes a componente, y no lo deja apuntado a Nil (0)... entoces assigned siempre da True, aunque el botón ya no exista.


Saludos!


La franja horaria es GMT +2. Ahora son las 17:29:02.

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