Показать сообщение отдельно
  #1  
Старый 24.06.2019, 01:41
Motorolla Motorolla вне форума
Прохожий
 
Регистрация: 06.06.2019
Сообщения: 17
Версия Delphi: Delphi 7 / XE8
Репутация: 10
По умолчанию Несколько вопросов по созданию компонентов

Практикуюсь в создании компонента на основе 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 и есть ответ на мой вопрос. В любом случае ваши прямые ответы будут мне полезными, указывая на важные моменты.
Ответить с цитированием