Tworzę komponent, jednym z pól jest klasa dziedzicząca z TOwnedCollection. Jego elementy - klasa dziedzicząca TCollectionItem ma właściwości read i write, różnie. Wycinek kodu dla jasności (może czegoś tam nie przekleiłem i zmieniłem nazwę, ale to chyba nieważne):
TMyCollectionItem = class (TCollectionItem)
private
FMyStringData : String;
FMyIntegerData : Integer;
public
procedure Assign (ASource : TPersistent); override;
published
property MyStringData : String read FMyStringData write
FMyStringData;
property MyIntegerData : Integer read FMyIntegerData write
FMyIntegerData;
end;
TMyCollection = class (TOwnedCollection)
private
function Add :TCollectionItem;
function Insert(const AIndex : Integer) : TCollectionItem;
protected
function GetItem (const AIndex : Integer) : TCollectionItem;
procedure SetItem (const AIndex : Integer;
const AValue : TCollectionItem);
public
constructor Create (const AOwner : TComponent);
function FindItemID (const AID : Integer) : TCollectionItem;
property Items [const AIndex : Integer] : TCollectionItem read GetItem write SetItem;
end;
TTestComponent = class(TComponent)
private
FMyCollection: TMyCollection;
procedure SetMyCollection(const Value: TMyCollection);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property MyCollection: TMyCollection read FMyCollection; // <-- o to się rozchodzi
end;
Po położeniu komponentu na formę mam do dyspozycji domyślny edytor do property MyCollection (podobnie jak to jest w TPanels w TStatusBar itp.), w którym mogę nie tylko zmieniać właściwości, ale i oczywiście dodawać lub usuwać same elementy. No i problem: nie wiem jak zrobić, żeby nie można było dodawać ani usuwać tych TCollectionItem z poziomu edytora w trybie programowanie (IDE). Rzecz w tym, że constructor TMyCollection sam tworzy tyle TMyCollectionItems, ile trzeba (na podstawie zasobow systemu), i nie chcę tego w żaden sposob zmieniać. Czym w ogóle można "wpłynąć" na pracę domyślnego edytora?
Jacek
Mam rozwiązanie - RegisterPropertyEditor(TypeInfo(TmyCollection), nil, '', TMyCollectionProperty); gdzie nadpisana jest funkcja GetColOptions w TCollectionProperty.
Jacek