Главная страница
    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.011 c
14-1126678248
Ega23
2005-09-14 10:10
2005.10.09
Wanted!!! "Уездный город N"


14-1126707015
Prohodil Mimo
2005-09-14 18:10
2005.10.09
Радуйтесь! я на клаву наклейки повесил :о)


2-1125246461
Андрей Молчанов
2005-08-28 20:27
2005.10.09
ShellExecute


2-1125049550
KyRo
2005-08-26 13:45
2005.10.09
Округлить или уменьшить число в дбгрид


1-1127150021
Alexon
2005-09-19 21:13
2005.10.09
Delphi 5 и Windows XP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский