![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интерфейсные свойства
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 ? или что ?