Delphi:如何允许在设计时设置TCollectionItem的TClass属性

时间:2015-04-11 17:04:30

标签: class delphi set design-time tcollectionitem

我正在开发一个适用于多个类的组件。 为了允许添加托管类列表,我编写了一个TCollection的继承类,其中每个项目(继承自TCollectionItem)定义了已发布的" TargetClassName"属性。 " TargetClassName" property的setter函数,调用以下函数以找到相应的TClass:

function FindAnyClass(const Name: string): TClass;
var
  ctx: TRttiContext;
  typ: TRttiType;
  list: TArray<TRttiType>;
begin
  Result := nil;
  ctx := TRttiContext.Create;
  list := ctx.GetTypes;
  for typ in list do
    begin
      if typ.IsInstance and (EndsText(Name, typ.Name)) then
        begin
          Result := typ.AsInstance.MetaClassType;
          break;
        end;
    end;
  ctx.Free;
end;

(感谢Dalija Prasnikar撰写函数Get class by its name in Delphi)。

现在,我想知道是否有更好的方法允许在设计时向TCollectionItem添加类。你怎么看待它? 希望阅读有趣的解决方案! 谢谢大家。

1 个答案:

答案 0 :(得分:0)

在TCollection上创建

您需要引入Collat​​ion类 它以两种方式存在 1:在创建时间硬编码X:= TMycollat​​ion.Create(TMyCollat​​ionClass) 2:你的解决方案X:= TMycollat​​ion.Create(FindAnyClass('TMyCollat​​ionClass'));