Ver Mensaje Individual
  #4  
Antiguo 05-06-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cuando una componente tiene una referencia a otra (sin ser su dueña) lo que se usa es una combinación de los métodos FreeNotification de la componente referenciada y Notification de la componente que tiene la refrencia.

Para fijar ideas considera el caso de un DBEdit y su propiedad DataSource.

Cuando asignas una componente TDataSource a la propiedad DataSource del DBEdit, éste usa DataSource.FreeNotification(Self) lo cual instruye a DataSource a notificar al DBEdit cuando se destruya.

El DBEdit recibe la notificación en el método Notification (deberás redefinirlo):


Código Delphi [-]
if (AComponent = Self.DataSource) and (Operation = opRemove) then
  Self.DataSource := nil;

Como ves, es en este método entonces donde aprovechas para quitar la componente referenciada de tu lista y fijar cualquier referencia a ella a nil para así saber que ya no es una referencia válida.

Imagino que esto es lo que hace TComponentList.

// Saludos
Responder Con Cita