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;