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

Вниз

Удаление ссылок на связанный компонент при удалении оного   Найти похожие ветки 

 
OMGovdan ©   (2006-11-29 20:54) [0]

Здравствуйте, знатоки!

Подскажите пожалуйста, каким образом обрабатывать удаление связанного компонента, чтобы у основного не оставались битые ссылки? Если можно. с примером кода...

Заранее благодарен за помощь


 
Юрий Зотов ©   (2006-11-29 21:52) [1]


type
 TLink = class;
 
 TOwner = class (...) // Обязательно потомок TComponent
 private
   FLink: TLink;
   procedure SetLink(Value: TLink);
 protected
   procedure Notification (...); override;
 ...
 end;

 TLink = class (...) // Обязательно потомок TComponent
 ...
 end;

procedure TOwner.SetLink(Value: TLink);
begin
 if Value <> FLink then
 begin
   if FLink <> nil then
     RemoveFreeNotification(FLink);
   FLink := Value;
   if FLink <> nil then
     FreeNotification(FLink)
 end
end;
 
procedure TOwner.Notification (...); override;
begin
 inherited;
 if (Operation = opRemove) and (AComponent = FLink) then
   FLink := nil
end;


 
Юрий Зотов ©   (2006-11-29 22:04) [2]

Дополнение: если можно быть уверенным, что оба компонента всегда имеют общего Owner"а, то метод Set не нужен, достаточно только Notification.

Подробности см. в справке по TComponent (Notification, FreeNotification, RemoveFreeNotification).


 
OMGovdan ©   (2006-11-29 22:47) [3]

Спасибо большое. Пример очень помог. Уже все работает.



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

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

Наверх




Память: 0.47 MB
Время: 0.015 c
2-1197539933
Washington
2007-12-13 12:58
2008.01.13
Рисование


15-1197245273
Анатолий Подгорецкий
2007-12-10 03:07
2008.01.13
Обсуждения качества модерирования форумов


3-1189053463
de.
2007-09-06 08:37
2008.01.13
Поиск по Lookup полям


2-1197395228
@!!ex
2007-12-11 20:47
2008.01.13
Окно в котором нажа пункт меню. Как узнать?


3-1188949392
kalan
2007-09-05 03:43
2008.01.13
Использование Oracle и InterBase в одном приложении