Tu écris une procedure perso qui récupère l'objet qui l'appelle, puis qui le détruit, style :
procedure Form1.DestroyComponent(Sender : TObject);
begin
(Sender as TShape).Destroy;
end;
puis quand tu crée ton composant, tu attribut à l'événement 'OnClick' ta procedure 'destroyComponent' :
function Form1.CreateShape() : TShape;
var
NewItem : TShape;
begin
NewItem := TShape.Create(self);
NewItem.Name := 'NouveauRectangle';
NewItem.OnClick := DestroyComponent;
CreateShape := NewItem;
end;
Après, si tes composant peuvent être de plusieurs type, soit tu crée une procedure et un fonction par type, soit tu test le type du Sender dans ta fonction DestroyComponent.