Привет всем. Пишу свой компонент. Захотел спрятать группу настроек в отдельном объекте, наследнике TPersistent, как водицо. Одна из настроек - коллекция. На мой взгляд все правильно, но в DesingTime не открывается редактор коллекции - после нажатия на кнопку с тремя точками никакой реакции :(
Код компонента:
| Код | unit uMTable;
interface
uses Classes, Controls, Graphics, Messages, SysUtils, Buttons, Windows;
type
TMColumns = class; TMHeader = class; TMTableBase = class;
TMColumn = class (TCollectionItem) private FCaption: TCaption; procedure SetCaption(const Value: TCaption); protected function GetOwner: TMColumns; reintroduce; published // свойства колонки {Текст в колонке} property Caption: TCaption read FCaption write SetCaption; end;
TMColumns = class (TCollection) private FHeader: TMHeader; protected function GetOwner: TPersistent; override; procedure Update(Item: TCollectionItem); override; public constructor Create(AOwner: TMHeader); end;
{оболочка для настройки заголовка таблицы - хидера} TMHeader = class (TPersistent) private FOwner: TMTableBase; FColumns: TMColumns; procedure SetColumns(const Value: TMColumns); public constructor Create(AOwner: TMTableBase); destructor Destroy; override; published property Columns: TMColumns read FColumns write SetColumns; end;
TMTableBase = class (TCustomControl) private // координаты рабочей области внутри бордюра FHeader: TMHeader; procedure SetHeader(const Value: TMHeader); protected {инфа о заголовке - хидере} property Header: TMHeader read FHeader write SetHeader; public constructor Create(AOwner: TComponent); override; destructor Destroy; override; end;
TMTable = class (TMTableBase) published property Header; end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('MSM', [TMTable]); end;
{ TMTable }
constructor TMTableBase.Create(AOwner: TComponent); begin inherited; FHeader := TMHeader.Create(Self); end;
destructor TMTableBase.Destroy; begin FHeader.Free; inherited; end;
procedure TMHeader.SetColumns(const Value: TMColumns); begin FColumns.Assign(Value); end;
procedure TMTableBase.SetHeader(const Value: TMHeader); begin FHeader.Assign(Value); end;
{ TMColumns }
constructor TMColumns.Create(AOwner: TMHeader); begin FHeader := AOwner; inherited Create(TMColumn); end;
function TMColumns.GetOwner: TPersistent; begin Result := FHeader; end;
procedure TMColumns.Update(Item: TCollectionItem); begin inherited; end;
{ TMColumn }
function TMColumn.GetOwner: TMColumns; begin Result := Collection as TMColumns; end;
procedure TMColumn.SetCaption(const Value: TCaption); begin FCaption := Value; end;
{ TMColHeader }
constructor TMHeader.Create(AOwner: TMTableBase); begin inherited Create; FOwner := AOwner; FColumns := TMColumns.Create(Self); end;
destructor TMHeader.Destroy; begin FColumns.Free; inherited; end;
end.
|
|