Я никогда не сталкивался с ситуацией, которая нуждалась в этом, и я впервые пытаюсь получить TCollection
как TCollectionItem
другого TCollection
.Все это прекрасно компилируется, но при нажатии на три точки за свойством TCollectionItem
s TCollection
, т.е.диалоговое окно со списком этого подпункта TCollection
не появляется.
У меня сложилось впечатление, что, поскольку не нужны никакие редакторы причудливых свойств (подпапка TCollection
содержит только те элементы, которые имеютstring
и свойство single
), среда IDE будет обрабатывать его автоматически.
По-видимому, это не так, или я наблюдаю за очевидным, что является хроническим недугом.
Модуль реализации (времени выполнения) имеет следующее:
type
TBitmapItemTag = class(TCollectionItem)
private
FTagName: string;
FTagFloat: Single;
published
property TagName: string read FTagName write FTagName;
property TagFloat: Single read FTagFloat write FTagFloat;
end;
TBitmapItemTags = class(TOwnedCollection)
end;
TBitmapItem = class(TCollectionItem)
private
FBitmap: TBitmap;
FBitmapItemTags: TBitmapItemTags;
public
constructor Create(Collection: TCollection); override;
destructor Destroy; override;
published
property Bitmap: TBitmap read FBitmap write FBitmap;
property Tags: TBitmapItemTags read FBitmapItemTags write FBitmapItemTags;
end;
TBitmaps = class(TCollection)
end;
TBitmapCollection = class(TComponent)
private
FBitmaps: TBitmaps;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Bitmaps: TBitmaps read FBitmaps write FBitmaps;
end;
implementation
{ TBitmapItem }
constructor TBitmapItem.Create(Collection: TCollection);
begin
inherited Create(Collection);
FBitmap := TBitmap.Create(0, 0);
FBitmapItemTags := TBitmapItemTags.Create(Self,TBitmapItemTag);
end;
destructor TBitmapItem.Destroy;
begin
FBitmap.Free;
FBitmapItemTags.Free;
inherited;
end;
{ TBitmapCollection }
constructor TBitmapCollection.Create(AOwner: TComponent);
begin
inherited;
FBitmaps := TBitmaps.Create(TBitmapItem);
end;
destructor TBitmapCollection.Destroy;
begin
FBitmaps.Free;
inherited;
end;
Процедура Register
реализована в модуле времени разработки и просто вызывает процедуру RegisterComponents
.И держит несколько ленивых RegisterPropertyEditor
попыток, которые безрезультатны.
Если кто-нибудь может указать мне кратчайший путь, чтобы IDE распознала TBitmapItemTag TCollectionItem
, я был бы благодарен.