Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.25;
Скачать: CL | DM;

Вниз

Как уведомить компоненты об уничтожении одной из них?   Найти похожие ветки 

 
Calm ©   (2003-08-12 08:48) [0]

Допустим имеется много компонент TMyConponent.
Имеются свойсва TMyComponent.ChildFirst:TMyConponent, TMyComponent.ChildSecond:TMyConponent.
В ходе работы программы один из компонент удаляеется. Как уведомить остальных об этом, чтобы кому нужно поняли, что свойства ChildX больше ни на что не указывают?

На ум приходят варианты:
1. Регистрировать все компоненты в некоем списке. При удалении у всех компонент списка вызывать метод проверки корретности свойств. IMHO ненаучно и извращение.
2. Сделать компоненты TWinConrol"ами и посылать им сообщения. Способ не на много отличается от первого.
3. При выполнении MyComponent1.ChildFirst:=MyComponent2; запоминать в MyComponent2 ссылку на MyComponent1. IMHO изврат еще больший.

А может это все-таки нормальные способы?
Подскажите, мастера, как быть в таком случае?


 
MBo ©   (2003-08-12 08:57) [1]

см. в исходниках механизм Notification


 
Zergling ©   (2003-08-12 09:01) [2]

TMyComponent = class(T...)
private
...
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); Dynamic;
public
...
published
...
end;

procedure TMyComponent.Notification(AComponent: TComponent; Operation: TOperation);
begin
if Operation = opRemove then ...;
end;


 
Zergling ©   (2003-08-12 09:02) [3]

MBo © Опередил :)


 
icWasya ©   (2003-08-12 09:15) [4]

только не Dynamic а Override


 
Zergling ©   (2003-08-12 09:28) [5]

icWasya © (12.08.03 09:15) [4]

Все определяется задачей.
Смотря от какого класса произощел его компонент. Tсли например от TCollectionItem то Dynamic.


 
Calm ©   (2003-08-12 10:27) [6]

Все большое спасибо :)


 
Calm ©   (2003-08-12 10:31) [7]

А как поступить лучше, если имеется подобная схема, но объекты являются не потомками TComponent, у которых есть метод Notification, а непосредственными потомками TObject?


 
pasha_golub ©   (2003-08-12 11:03) [8]

Сделать их потомками TComponent ;-)


 
icWasya ©   (2003-08-12 11:29) [9]

>> .. объекты не являются потомками TComponent ...
Ну тогда посмотри, как ЭТО делается у нормальных компонент и попытайся сделать что то похожее.
А делается так
каждая компонента ведёт список, комго надо известить о своём уничтожении (см FreeNotification)
в деструкторе компоненты просматривается этот список, и у всех компонент из этого списка, а такжее у Ownera, вызывается метод
Notification. Предполагается, что в методе Notification компонента правильно удалит ссылки на уничтожаемую компоненту, почистит список уведомлений (см RemoveFreeNotification), и, если необходимо, уведомит кого-нибудь ещё



Страницы: 1 вся ветка

Текущий архив: 2003.08.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
7-81976
Renard_
2003-06-10 09:20
2003.08.25
Как опросить флаги СОМ порта (DCD,DSR,CTS,RI)


1-81789
iNew
2003-08-14 06:05
2003.08.25
Как показать прогресс копирования?


1-81771
Relaxxx
2003-08-14 12:51
2003.08.25
Диманическое присвоение имени StringList


1-81703
Yuraz
2003-08-11 11:17
2003.08.25
Как в Font.Color = clBlac вместо clBlack написать цифрами (0,0,0)


3-81557
OlegNOE
2003-07-30 19:00
2003.08.25
Определение номера записи в фильтрованом наборе