28 Ağustos 2012 Salı

Bir sınıftan türeyen alt sınıfların listesi(Rtti)

// Bir class'tan türeyen alt class'ların listesini döndürür

uses
   Rtti,
   TypInfo,
   Classes;

function GetSubClassList(AClass: TClass): TStrings;
var
  atypes:TArray;
  atype:TRttiType;
  alist:TStringList;
begin
   r:=TRttiContext.Create;
   atypes:=r.GetTypes;

   alist:=TStringList.Create;
   for atype in atypes do
   begin          
      if (atype.TypeKind=tkClass) and atype.IsInstance and
          atype.AsInstance.MetaclassType.InheritsFrom(AClass)
         and (atype.Name<>AClass.ClassName) then
         begin
            alist.Add(atype.Name);
         end;
   end;
  //atype.AsInstance.BaseType.MetaclassType.ClassName
  Result:=alist;
end;

 // Kullanımı

 ShowMessage(GetSubClassList(TControl).Text);