4

私が取り組んでいるコンポーネントは、TCollection を使用して他のコンポーネントへのリンクを保持しています。アイテムがデザイナーで編集されると、ラベルは次のようになります。

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

意味のあるラベル (おそらくリンクされたコンポーネントの名前) を追加するにはどうすればよいですか? 例えば

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

おまけとして、コンポーネントをダブルクリックしたときにコレクション エディターが表示されるようにする方法を教えてください。

4

2 に答える 2

5

意味のある名前を表示するには、GetDisplayName をオーバーライドします。

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

非ビジュアル コンポーネントがダブルクリックされたときにコレクション エディタを表示するには、TComponentEditor Edit プロシージャをオーバーライドする必要があります。

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

...そしてエディタを登録します:

RegisterComponentEditor(TMyCollectionComponent, TMyPropertyEditor);
于 2009-10-12T10:20:27.043 に答える
1

エディターに表示される名前は、アイテムの DisplayName プロパティに格納されます。リンクを作成するときに、コードを次のように設定してみてください。

item.DisplayName := linkedItem.Name;

ただし、ユーザーが既に DisplayName を設定している場合は、DisplayName を変更しないように注意してください。これは、UI の大きな煩わしさです。

于 2009-09-12T14:14:50.030 に答える