Главная страница
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.066 c
4-1123881571
кактусбел
2005-08-13 01:19
2005.10.09
Добавление пункта в стандартное меню проводника


9-1117475173
WandR
2005-05-30 21:46
2005.10.09
Проблема с затекстуриванием


14-1126786779
trin
2005-09-15 16:19
2005.10.09
ссылки в ICQ


1-1126774119
Курдль
2005-09-15 12:48
2005.10.09
Как заставить TDBCtrlGrid принимать на себя фокус при DragDrop?


4-1124080356
leonidus
2005-08-15 08:32
2005.10.09
В чем разнича между GetAsyncKeyState и GetKeyState?