Не открывается редактор свойств для поля типа TCollection

darkstarx

Подскажите, пожалуйста, где ошибку сделалЕсть контрол для отрисовки различных элементов. Этот контрол имеет несколько полей класса TEntityCollection для различных графических элементов, наследуемых от TGraphEntity
TEntityCollection = <b>class</b>(TCollection)
 <b>private</b>
 <b>function</b> GetItem(Index: Integer): TGraphEntity;
 <b>procedure</b> SetItem(Index: Integer; Value: TGraphEntity);
 <b>protected</b>
 <b>function</b> GetOwner: TPersistent; override;
 <b>public</b>
 GraphControl: TGraphControl;
 <b>constructor</b> Create(Owner: TGraphControl;
 ItemClass: TCollectionItemClass);
 <b>function</b> Add: TGraphEntity;
 <b>function</b> AddItem(Item: TGraphEntity; Index: Integer): TGraphEntity;
 <b>function</b> Insert(Index: Integer): TGraphEntity;
 <b>property</b> Items[Index: Integer]: TGraphEntity read GetItem write SetItem; default;
 <b>end</b>;
TGraphEntity = <b>class</b>(TCollectionItem)
 <b>private</b>
 FForeColor: TAlphaColor;
 FFontColor: TAlphaColor;
 FColor: TAlphaColor;
 FSubColor: TAlphaColor;
 FSelected: Boolean;
 FVisible: Boolean;
 <b>procedure</b> SetForeColor(Value: TAlphaColor);
 <b>procedure</b> SetFontColor(Value: TAlphaColor);
 <b>procedure</b> SetColor(Value: TAlphaColor);
 <b>procedure</b> SetSubColor(<b>const</b> Value: TAlphaColor);
 <b>public</b>
 Tracker: TTracker;
 Tag: Integer;
 <b>constructor</b> Create(Collection: TCollection); override;
 <b>procedure</b> Draw(Graphics: TGPGraphics); overload; virtual; abstract;
 <b>procedure</b> Draw(Canvas: TCanvas); overload; virtual; abstract;
 <b>function</b> GraphControl: TPersistent;
 <b>property</b> Selected: Boolean read FSelected write FSelected;
 <b>property</b> Visible: Boolean read FVisible write FVisible;
 <b>property</b> SubColor: TAlphaColor read FSubColor write SetSubColor;
 <b>published</b>
 <b>property</b> ForeColor: TAlphaColor read FForeColor write SetForeColor;
 <b>property</b> FontColor: TAlphaColor read FFontColor write SetFontColor;
 <b>property</b> Color: TAlphaColor read FColor write SetColor;
 <b>end</b>;
для коллекций этих элементов без проблем открывается редактор свойства, в котором я могу добавить в design-time элемент, он тут же рисуется на канве контрола.У контрола есть еще одно свойство, представленное классом
TGraphBarChart = <b>class</b>(TPersistent)
 <b>private</b>
 FOwner: TGraphControl; <i>// GraphControl abstract</i>
 FAxes: TEntityCollection; <i>// Axes of chart</i>
 FBars: TEntityCollection; <i>// Collection of bars</i>
 <b>procedure</b> SetBars(<b>const</b> Value: TEntityCollection);
 <b>procedure</b> VertAxisOnAlign(Sender: TObject);
 <b>public</b>
 <b>constructor</b> Create(AOwner: TGraphControl);
 <b>destructor</b> Destroy(); override;
 <b>procedure</b> Draw(Graphics: TGPGraphics); overload;
 <b>procedure</b> Draw(Canvas: TCanvas); overload;
 <b>procedure</b> AlignTo(Width, Height: Integer);
 <b>published</b>
 <b>property</b> Bars: TEntityCollection read FBars write SetBars;
 <b>end</b>;
и конструктором
<b>constructor</b> TGraphBarChart.Create(AOwner: TGraphControl);
<b>var</b>
 ax: TGraphAxis;
<b>begin</b>
 FOwner:=AOwner;
 FBars:=TEntityCollection.Create(AOwner, TGraphBar);
 FAxes:=TEntityCollection.Create(AOwner, TGraphAxis);
 <i>// Вертикальная ось</i>
 ax:=TGraphAxis(FAxes.Add); ax.AxisAlign:=alLeftUp; ax.OnAlign:=VertAxisOnAlign;
 <i>// Горизонтальная ось</i>
 ax:=TGraphAxis(FAxes.Add); ax.AxisAlign:=alHorizCenterRight;

 TGraphAxis(FAxes[<b>0</b>]).AlignTo(AOwner.Width, AOwner.Height);
 TGraphAxis(FAxes[<b>1</b>]).AlignTo(AOwner.Width, AOwner.Height);
<b>end</b>;
Когда я открываю это свойство (жму + в PropertyList контрола TGraphControl) и жму кнопочку ... рядом со свойством Bars вложенного объекта TGraphBarChart, то редактор коллекции не открывается! Хотя сама коллекция точно создана к этому моменту! возможно, я коряво проблему описал, и понадобятся более подробные коды, я выложу их по Вашей просьбе. просто не хотелось первый же пост ими перегружать.Собственно сам вопрос: почему? )) подскажите, на что обратить внимание в первую очередь
3 ответа

darkstarx

У меня кстати такая же трабла. В книге Конопко ничего по этому случаю не нашел.


darkstarx

Если честно, вникать в проблему лень. Могу только предположить, что если
TGraphBarChart = <b>class</b>(TPersistent)
то надо бы перекрыть метод GetOwner...


darkstarx

Разобрался. Проблема оказалась в Owner.Владельцем должна быть форма.