зарегистрируйте для компонента такой редактор
TColunmEditor = class(TComponentEditor)
private
FPropInfo: PPropInfo;
FPropEdit: IProperty;
procedure GetPropProc(const PropEdit: IProperty);
public
constructor Create(AComponent: TComponent; ADesigner: IDesigner); override;
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
function GetPropertyName:string; virtual;
end;
{ TColunmEditor }
// редактор свойства - коллекции (возвращаем имя свойства)
function TColunmEditor.GetPropertyName: string;
begin //
end;
constructor TColunmEditor.Create(AComponent: TComponent; ADesigner: IDesigner);
begin
inherited;
FPropInfo := GetPropInfo(GetComponent.ClassInfo, GetPropertyName, [tkClass])
end;
procedure TColunmEditor.GetPropProc(const PropEdit: IProperty);
begin
if PropEdit.GetPropInfo = FPropInfo then FPropEdit := PropEdit
end;
procedure TColunmEditor.ExecuteVerb(Index: Integer);
var Selections: TDesignerSelections;
begin
case Index of
0: begin
if (FPropEdit = nil) and (FPropInfo <> nil) then begin
Selections := TDesignerSelections.Create;
try
Designer.GetSelections(Selections);
GetComponentProperties(Selections, [tkClass], Designer, GetPropProc)
finally
Selections.Free
end;{try}
end;{if}
if FPropEdit <> nil then FPropEdit.Edit
end
else inherited;
end;{case}
end;
function TColunmEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := GetPropertyName+' Editor...';
else Result := inherited GetVerb(Index);
end;
end;
function TColunmEditor.GetVerbCount: Integer;
begin
Result := inherited GetVerbCount + 1;
end;