Ver Mensaje Individual
  #1  
Antiguo 20-01-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Reputación: 24
marto Va por buen camino
Sobrecargando destructor

Hola a todos,

Estoy creando un componente muy sencillo que hereda de TComboBox. El tema es que necesito que los punteros Objects de su propiedad items apunten a ciertos objetos de una clase. Para lo que hayan leido el hilo sobre "propiedades de clases" , se trata de cargarlo con las listas que allí describo. Bien, en caso de que así se indique, el componente se ha de encargar de liberar estos objetos. Esto lo intento con el siguiente código:
Código:
procedure Destroy; override;
....
destructor TNxAuxCombo.Destroy;
var
  i: Integer;
begin
  if FOwnObjects then
    for i := 0 to Count - 1 do
      if Items.Objects[i] <> Nil then
         Items.Objects[i].Free;
  inherited;
end;
Tengo dos problemas. En primer lugar, al ejecutarse el destructor, Items vale nil, de manera que se produce una excepción. No entiendo cómo puede pasar eso, ya que Items, si no recuerdo mal (no tego aqui el Delphi) se detruye en el destructor de TListControl.
En segundo lugar, si creo el combo en diseño, al destruirse el form me lanza una excepción de "Control xxxx has no parent window". Si depuro el código, efectivamente en mi destructor Parent = nil. Eso me parece muy bien, pero ¿Por que está accediendo al parent?
A ver si tenéis alguna idea y me echáis una mano.

Ah! os pongo el código del constructor por si os da más pistas:
Código:
constructor Create(AOwner: TComponent); override;
....
constructor TNxAuxCombo.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FOwnObjects := true;
  Style := csDropDownList;

end;
__________________
E pur si muove
Responder Con Cita