неполучается грузить ресурс inherited субкомпонента.
Добавлено: 01.10.2009 22:03:41
Драсте шаманам.
написал компонент контейнер (FilterSet) - который в собственном списке содержит набор субкомпонентов (baseEventFilter). листинг ниже.
данный контейнер нормально сериализуетсяв базовой форму, но уже нехочет грузиться в унаследованой.
причина в том что немогут найтись предки субкомпонентов в предковой форме. насколько я понял ето потому что поиск предка идет по имени компонента в корне - тоесть в самой форме, а не в контейнере в котором они лежат.
если кто воевал, подскажите как лечица.
FiltersSet = class(TComponent)
protected
//FItems : LogTracks;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent);override;
function GetChildOwner: TComponent; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
public
constructor Create(aOwner : TComponent);override;
destructor Destroy;override;
end;
implementation
uses AdressPaleteFrame
, sysutils
, strutils
;
{****************************************************************************
FiltersSet
******************************************************************************}
constructor FiltersSet.Create(aOwner : TComponent);
begin
inherited;
end;
destructor FiltersSet.Destroy;
begin
inherited;
end;
procedure FiltersSet.GetChildren(Proc: TGetChildProc; Root: TComponent);
var
I: Integer;
OwnedComponent: TComponent;
begin
for I := 0 to ComponentCount - 1 do
begin
OwnedComponent := Components[I];
if not OwnedComponent.HasParent then Proc(OwnedComponent);
end;
end;
function FiltersSet.GetChildOwner: TComponent;
begin
result := self;
end;
procedure FiltersSet.Notification(AComponent: TComponent;Operation: TOperation);
var
SubComp : boolean;
begin
SubComp := (assigned(AComponent) and (AComponent.Owner = Self));
inherited;
if SubComp then begin
if assigned(FOnChange) then
FOnChange(Self, AComponent, Operation);
if Operation = opInsert then
AComponent.SetSubComponent(true)
else{ opRemove }
AComponent.SetSubComponent(false);
end;
end;
написал компонент контейнер (FilterSet) - который в собственном списке содержит набор субкомпонентов (baseEventFilter). листинг ниже.
данный контейнер нормально сериализуетсяв базовой форму, но уже нехочет грузиться в унаследованой.
причина в том что немогут найтись предки субкомпонентов в предковой форме. насколько я понял ето потому что поиск предка идет по имени компонента в корне - тоесть в самой форме, а не в контейнере в котором они лежат.
если кто воевал, подскажите как лечица.
FiltersSet = class(TComponent)
protected
//FItems : LogTracks;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent);override;
function GetChildOwner: TComponent; override;
procedure Notification(AComponent: TComponent;
Operation: TOperation); override;
public
constructor Create(aOwner : TComponent);override;
destructor Destroy;override;
end;
implementation
uses AdressPaleteFrame
, sysutils
, strutils
;
{****************************************************************************
FiltersSet
******************************************************************************}
constructor FiltersSet.Create(aOwner : TComponent);
begin
inherited;
end;
destructor FiltersSet.Destroy;
begin
inherited;
end;
procedure FiltersSet.GetChildren(Proc: TGetChildProc; Root: TComponent);
var
I: Integer;
OwnedComponent: TComponent;
begin
for I := 0 to ComponentCount - 1 do
begin
OwnedComponent := Components[I];
if not OwnedComponent.HasParent then Proc(OwnedComponent);
end;
end;
function FiltersSet.GetChildOwner: TComponent;
begin
result := self;
end;
procedure FiltersSet.Notification(AComponent: TComponent;Operation: TOperation);
var
SubComp : boolean;
begin
SubComp := (assigned(AComponent) and (AComponent.Owner = Self));
inherited;
if SubComp then begin
if assigned(FOnChange) then
FOnChange(Self, AComponent, Operation);
if Operation = opInsert then
AComponent.SetSubComponent(true)
else{ opRemove }
AComponent.SetSubComponent(false);
end;
end;