Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интерфейсные свойства


Priest ©   (2004-12-07 10:17:00) 

В Дельфи 7 можно создать свойства, типом которых являються интерфейсы. Как это реализовать. А именно не возникает ли проблем при удалении связанных компонент и нужно ли создавать метод Notification


Юрий Зотов   (2004-12-09 01:44:00) [1]

> Priest   (08.12.04 17:52) [2]
> Что произойдёт???

Надо полагать, произойдет битая ссылка. Нужно использовать механизм уведомлений и делегирование. Вот видоизмененный и дополненный (но не проверенный) пример из хелпа.

type
 IMyInterface = interface
   procedure P1;
   procedure P2;
 end;

 TMyImplComp = class(TComponent)
 public
   procedure P1;
   procedure P2;
 end;

 TMyComp = class(TComponent, IMyInterface)
 private
   FMyImplComp: TMyImplComp;
   procedure SetMyImplComp(const Value: TMyImplComp);
 protected
   procedure Notification(AComponent: TComponent; Operation: TOperation); override;
 published
   property MyImplComp: TMyImplComp
     read FMyImplComp write SetMyImplComp implements IMyInterface;
 end;

procedure TMyComp.SetMyImplComp(const Value: TMyImplComp);
begin
 if FMyImplComp <> Value then
 begin
   if FMyImplComp <> nil then
     RemoveFreeNotification(FMyImplComp);
   FMyImplComp := Value;
   if FMyImplComp <> nil then
     FreeNotification(FMyImplComp)
 end
end;

procedure TMyComp.Notification(AComponent: TComponent; Operation: TOperation);
begin
 inherited;
 if (Operation = opRemove) and (AComponent = FMyImplComp) then
   FMyImplComp := nil
end;


Priest   (2004-12-08 17:52:00) [2]

Да. Если я в инспекторе объектов свойству SomeInterface присвою какой либо компонент, реализующий интерфейс ISomeInterface, а потом удалю этот компнент с формы........Что произойдёт???


Digitman   (2004-12-08 13:15:00) [3]


> Как это реализовать


property SomeInterface: ISomeInterface read.. write ..;


> не возникает ли проблем при удалении связанных компонент
> и нужно ли создавать метод Notification


что имеется ввиду под "связанными компонентами" ? некий компонент, интерфейс которого запрашивается и назначается св-ву SomeInterface ? или что ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо