У меня есть несколько хелперов классов для компонентов для создания подкомпонентов -, таких как всплывающие меню, для доступа к этим подкомпонентам -во время выполнения я создаю Singleton TDictionary.
Мой вопрос: как узнать, что компонент владельца -уничтожается, чтобы удалить компонент -из TDictionary?
Если это специализированный компонент, я добавляю его в деструктор, но я не могу добавить конструктор и/или деструктор в хелпер класса.
Правка -Решение
Я создал базовый объект, который принимает TObject в качестве параметров, при использовании действие удаления необходимо выполнять вручную.
Затем я унаследовал от него новый класс, переопределив методы, чтобы они принимали только TComponent. Вот как теперь выглядит соответствующая часть кода:
type
TCustomLinkedComponents = class(TCustomLinkedObjects)
strict private
type
TCollector = class(TComponent)
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
end;
strict private
FCollector: TCollector;
[..]
end;
procedure TCustomLinkedComponents.Add(Owner: TComponent; const LinkedName: string; LinkedComponent: TComponent);
begin
inherited Add(Owner, LinkedName, LinkedComponent);
FCollector.FreeNotification(LinkedComponent);
end;
procedure TCustomLinkedComponents.TCollector.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if Operation = opRemove then
LinkedObjects.Remove(TObject(AComponent));
end;
Используя этот подход, я могу решить свою настоящую потребность и позволить открыться, чтобы ее можно было легко расширить.