Практикуюсь в создании компонента на основе TGraphicControl.
Подскажите где почитать или посмотреть пример компонента с возможностью добавления вложенных элементов (например как это сделано в TabControl или StatusBar).
А так же у меня не получается создать в инспекторе объектов группу свойств второго порядка. Применяя стандартный тип, он будет отображаться в виде ветки дерева свойств, если применяю свой, то он будто не инициализирован - в инспекторе объектов появляется, но не может раскрыться. Вот поясняющая часть кода :
Код:
type TPivotPoint = (TopLeft,TopRight,BottomLeft,BottomRight);
type
TEdgeParams = class (TPersistent)
private
FShowFrame:boolean;
FWidth:byte;
FColor: TColor;
published
property ShowFrame:boolean read FShowFrame write FShowFrame default false;
property Color:TColor read FColor write FColor;
property Width:byte read FWidth write FWidth;
end;
type
TChartName = class(TPersistent)
private
FChartText:string;
FFontSize:integer;
FFontStyle:TFontStyles; //Этот работает
FEdgeParams:TEdgeParams; // Этот не раскрывается в инспекторе объектов
protected
published
property ChartText:string read FChartText write FChartText;
property FontSize:integer read FFontSize write FFontSize;
property FontStyle:TFontStyles read FFontStyle write FFontStyle;
property EdgeParams:TEdgeParams read FEdgeParams write FEdgeParams;
end;
{========================================================================}
type
TGraphPanel = class(TGraphicControl)
private
//...
FPivotPoint : TPivotPoint;
FChartName : TChartName;
protected
procedure SetPivot(NewPivot: TPivotPoint);
procedure DrawEdge;
procedure DrawChartName;
public
FWorkFrame:TAxis;
published
constructor Create(AOwner: TComponent); override;
//...
property PivotPoint : TPivotPoint read FPivotPoint write SetPivot default BottomLeft;
property ChartName : TChartName read FChartName write FChartName;// default BottomLeft;
property OnResize;
end;
procedure Register;
implementation
uses DateUtils;
procedure Register;
begin
RegisterComponents('Monitor', [TGraphPanel]);
end;
constructor TGraphPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FChartName:=TChartName.Create;
FEdge:=TEdgeParams.Create;
//...
with FWorkFrame do
begin
x0:=0;
y0:=0;
x1:=Width;
y1:=Height;
end;
Height := 100;
Width := 100;
FChartName.FFontSize:=8;
FChartName.FFontName:='System';
end;
ЗЫ. Пробую сейчас разобраться в содержимом ComCtrl, наверное TCollectionItem и есть ответ на мой вопрос. В любом случае ваши прямые ответы будут мне полезными, указывая на важные моменты.