Как зарегистрировать редактор свойств TCollectionItem как список объектов в инспекторе объектов? - PullRequest
1 голос
/ 21 января 2020

У меня есть коллекция, опубликованная в компоненте, и я хотел бы иметь возможность выбрать элемент коллекции в инспекторе объектов без использования метода сохранения индекса элемента. Я уже опубликовал свойство 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».

Как правильно реализовать редактор свойств для этого свойства?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...