Saludos,
pienso que en tu caso necesita incluir flag csSubcomponent
en tus subcomponentes:
Código:
TDigitalDisplay = class(TCustomPanel)
private
FImage1: TImage;
FStaticText1: TStaticText;
FPopupMenu1: TPopupMenu;
{...}
published
property StaticText1: TStaticText read FStaticText1; {r/o}
property Image1: TImage read FImage1;
property PopupMenu1: TPopupMenu read FPopupMenu1;
{...}
end;
constructor TDigitalDisplay.Create(AOwner: TComponent);
function CreateSubComponent(AClass: TComponentClass): TComponent;
begin
Result := AClass.Create(Self);
Result.SetSubComponent(True); {!!!!!!!!}
Result.FreeNotification(Self);
if Result is TControl then TControl(Result).Parent := Self;
end;
var
MenuItem: TMenuItem;
begin
inherited;
{...}
FStaticText1 := CreateSubComponent(TStaticText) as TStaticText;
FStaticText2 := CreateSubComponent(TStaticText) as TStaticText;
FStaticText3 := CreateSubComponent(TStaticText) as TStaticText;
FImage1 := CreateSubComponent(TImage) as TImage;
FPopupMenu1 := CreateSubComponent(TPopupMenu) as TPopupMenu;
MenuItem := TMenuItem.Create(PopupMenu1);
FPopupMenu1.Items.Add(MenuItem);
with MenuItem do
begin
Caption := 'Configurar';
OnClick := PopupConfigurar;
end;
end;
procedure TDigitalDisplay.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (AComponent = FStaticText1) and (Operation = opRemove) then FStaticText1 := nil;
if (AComponent = FStaticText2) and (Operation = opRemove) then FStaticText2 := nil;
if (AComponent = FStaticText3) and (Operation = opRemove) then FStaticText3 := nil;
if (AComponent = FPopupMenu1) and (Operation = opRemove) then FPopupMenu1 := nil;
if (AComponent = FImage1) and (Operation = opRemove) then FImage1 := nil;
end;
PS Porque creas subcomponentes en AfterConstruction?
Porque no en Create?