Форум: "Компоненты";
Текущий архив: 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