Изменить метку TCollectionItem в редакторе Delphi

Компонент, над которым я работаю, использует TCollection для хранения ссылок на другие компоненты. Когда элементы редактируются в дизайнере, их ярлыки выглядят примерно так:

0 - TComponentLink
1 - TComponentLink
2 - TComponentLink
3 - TComponentLink

Как добавить значимые метки (возможно, имя связанного компонента)? например

0 - UserList
1 - AnotherComponentName
2 - SomethingElse
3 - Whatever

В качестве бонуса, можете ли вы сказать мне, как сделать так, чтобы редактор коллекции появлялся, когда компонент дважды щелкнул?

2 ответа

Решение

Для отображения значимого имени переопределите GetDisplayName:

function TMyCollectionItem.GetDisplayName: string; 
begin 
  Result := 'My collection item name'; 
end;

Чтобы отобразить редактор коллекции при двойном щелчке на невизуальном компоненте, необходимо переопределить процедуру редактирования TComponentEditor.

TMyPropertyEditor = class(TComponentEditor)
public
  procedure Edit; override; // <-- Display the editor here
end;

... и зарегистрировать редактор:

RegisterComponentEditor(TMyCollectionComponent, TMyPropertyEditor);

Имя, отображаемое в редакторе, сохраняется в свойстве DisplayName элемента. Попробуйте установить свой код, чтобы установить что-то вроде этого при создании ссылки:

item.DisplayName := linkedItem.Name;

Будьте осторожны, чтобы не изменить DisplayName, если пользователь уже установил его. Это основное раздражение пользовательского интерфейса.

Другие вопросы по тегам