¬место ссылки на объект, реализующий то или иное свойство, вы можете ссылатьс¤ на св¤занный с ним интерфейс. ¬ этом случае компонент не имеет доступа к объекту, исполн¤ющему интерфейс, и не может обратитьс¤ к его методу FreeNotif ication (см. предыдущий раздел). ƒл¤ оповещени¤ объектов, исполн¤ющих интерфейс, об изменении значени¤ свойства в методе SetXXXX свойства-интерфейса следует обращатьс¤ к методу Ref erencelnterf асе компонента:

type TMyComponent = class(TComponent) private FIntfProp: IMylnterface;

procedure SetlntfProp(Value: IMylnterface); procedure Notification(AComponent: TComponent; Operation: TOperation); override; puplic

property IntfProp: IMylnterface read FIntfProp write SetlntfProp;
end;
procedure TMyComponent.SetlntfProp(Value: IMylnterface);
begin
Referencelnterface(FIntfProp, opRemove);
FIntfProp := Value;
Referencelnterface(FIntfProp, oplnsert) end;
»
procedure TMyComponent.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited Notyfication(ACopmponent, Operation);
if (Assigne(IntfProp))
and (AComponent.IsImplementorOf(IMylnterface)) then
MylntfProp := nil end;

ћетод ReferenceComponent отыскивает компонент, исполн¤ющий интерфейс, и снимает с него об¤занность оповещать об уничтожении (параметр opRemove) или, наоборот, об¤зывает оповещать (параметр oplnsert):

function TComponent.Referencelnterfасе(const I: Ilnterface;
Operation: TOperation): Boolean;
var
ICR: IInterfaceComponentReference;

begin Result (I <> nil) and

Supports(I, IlnterfaceComponentReference, ICR);
if Result then
if Operation = oplnsert then
ICR.GetComponent.FreeNotification(Self)
else
ICR.GetComponent.RemoveFreeNotification(Self);
end;

ќбратите внимание: метод Notification обращаетс¤ к свойству Intf Prop, но никак не к внутреннему полю FIntf Prop. ƒоступ к этому полю может идти только через свойство-интерфейс.

7.7. -войства-объекты || ќглавление || 7.9. ¬заимодействие с файлом формы


Искусство создания компонентов Delphi



Новости за месяц

  • Сентябрь
    2019
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс