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

Вниз

Интерфейсные свойства   Найти похожие ветки 

 
Priest   (2004-12-07 10:17) [0]

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


 
Digitman ©   (2004-12-08 13:15) [1]


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


property SomeInterface: ISomeInterface read.. write ..;


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


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


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

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


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

> 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;



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

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

Наверх




Память: 0.47 MB
Время: 0.07 c
14-1126709382
QwertyKz
2005-09-14 18:49
2005.10.09
где хранятся пароль для доступа к домену


8-1116687318
andrew_john
2005-05-21 18:55
2005.10.09
Использование компонентов TImage для построения слоев


10-1105421249
Руслан
2005-01-11 08:27
2005.10.09
ExcelApplication


2-1125584083
Ксардас
2005-09-01 18:14
2005.10.09
Lines в memo


14-1126882368
Lexer
2005-09-16 18:52
2005.10.09
Офис - не лучшее место для продуктивной работы.