Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2005.10.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.014 c
14-1126844828
Rentgen
2005-09-16 08:27
2005.10.09
COM1 -> Ethernet -> COMn


10-1105600193
Vlash
2005-01-13 10:09
2005.10.09
Вывод окна приложения-сервера на передний план


2-1124832965
AIms
2005-08-24 01:36
2005.10.09
Почему возникают тормоза при переходе от массива к такой схеме ?


14-1126961646
cspr
2005-09-17 16:54
2005.10.09
Настройка Winamp`a


14-1126858405
Juice
2005-09-16 12:13
2005.10.09
Опять проблемы с ноутбуком





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский