У меня есть коллекция, опубликованная в компоненте, и я хотел бы иметь возможность выбрать элемент коллекции в инспекторе объектов без использования метода сохранения индекса элемента. Я уже опубликовал свойство type to item (TCollectionItem), но в инспекторе объектов оно отображается как подкомпонент без возможности выбора другого. Я зарегистрировал редактор, чтобы можно было отобразить список элементов, но он выдает ошибку при нажатии на выпадающий список элементов. Ниже приведен иллюстративный отрывок проблемы:
TMyCollection = class(TCollection)
end;
TMyCollectionItem = class(TCollectionItem)
end;
TMycomponent = class(TComponent)
published
property MyColection: TMyCollection;
property MyChosedItem: TCollectionItem; //< this need to be a list of TCollectionItem
end;
Ниже редактора свойств
type
TMyItemProperty = class(TClassProperty)
public
function GetAttributes: TPropertyAttributes; override;
procedure GetValueList(List: TStrings); virtual;
procedure GetValues(Proc: TGetStrProc); override;
procedure SetValue(const Value: string); override;
end;
function TMyItemProperty.GetAttributes: TPropertyAttributes;
begin
Result := [paValueList, paSortList, paMultiSelect];
end;
procedure TMyItemProperty.GetValueList(List: TStrings);
var
Item: TMyCollectionItem;
Items: TMyCollection;
I: Integer;
begin
Items := (GetComponent(0) as TMyComponent).MyColection;
if Items <> nil then
for I := 0 to Items.Count-1 do
List.Add(Items.Items[I].GetNamePath); // Is this the problem ?
end;
procedure TMyItemProperty.GetValues(Proc: TGetStrProc);
var
I: Integer;
Values: TStringList;
begin
Values := TStringList.Create;
try
GetValueList(Values);
for I := 0 to Values.Count - 1 do
Proc(Values[I]);
finally
Values.Free;
end;
end;
procedure TMyItemProperty.SetValue(const Value: string);
begin
inherited SetValue(Value);
end;
, когда я открываю раскрывающийся список свойств, появляется ошибка: «Invalid TypeCast».
Как правильно реализовать редактор свойств для этого свойства?