Hola,
Lo he podido solucionar (de momento, al menos, parece funcionar bien, no se produce el error antes mencionado y el componente va también bien en tiempo de ejecución) sobreescribiendo el método "Notification" de "TComponent".
Primeramente creo una variable privada "FAcciones" de tipo "TCustomActionList". Luego una propiedad "Acciones" del mismo tipo, y que va a leer y a escribirse en "FAcciones". En el constructor del componente hago lo siguiente:
Código Delphi
[-]
constructor TDecBrowser.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FEnlaces := TStringList.Create;
FAcciones := TActionList.Create(Forms.Application);
inherited OnBeforeNavigate2 := ComprobarEnlaces;
end;
Creo la instancia de "TActionList" en "Application", porque, de no hacerlo así, de hacerlo en "Self" (el propio componente) en el "inspector de objetos" de Delphi la propiedad no queda muy bien al comienzo. Puede verse. No es el caso ahora.
En el destructor del componente libero la variable "FAcciones" sin problemas, tal que así:
Código Delphi
[-]
destructor TDecBrowser.Destroy;
begin
FEnlaces.Free;
FAcciones.Free;
inherited Destroy;
end;
Y el quid de la solución está en el método "Notification", como queda dicho, sobreescrito para que quede de este modo:
Código Delphi
[-]
procedure TDecBrowser.Notification(Component: TComponent;
Operation: TOperation);
begin
inherited;
if (csDesigning in ComponentState) then
begin
if (Operation = opRemove) then
begin
if (Component = FAcciones) then
begin
FAcciones.RemoveFreeNotification(Self);
FAcciones := TCustomActionList.Create(Forms.Application);
end;
end;
end;
end;
A lo mejor es una burrada. Lo que estoy haciendo es comprobar que el componente que se quita de mi componente, valga la redundancia, es "FAcciones", si es así notifico su eliminación al IDE de Delphi (supongo algo así, no estoy muy puesto, para qué nos vamos a engañar) y a continuación creo de nuevo una instancia de "FAcciones", por si el usuario quiere añadir de nuevo un componente "TActionList".
Eso era lo que se apreciaba antes con error: al quitar el "TActionList" del componente "DecBrowser" en tiempo de diseño podía verse junto con el mensaje de error (Access violation, Abstract error...) cómo "desaparecía" la propiedad "Acciones" del "inspector de objetos"...
En fin. No sé qué tal la solución. Ahora revisaré cuanto dice
Lepe, pues seguro será interesante. Ya podéis descargar, por cierto, el componente actualizado en mi página Web personal:
dec.clubdelphi.com.