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

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
ismailkocacan
Üye
Mesajlar: 88
Kayıt: 25 Eyl 2011 06:11
Konum: İstanbul
İletişim:

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

Mesaj gönderen ismailkocacan »

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

Kod: Tümünü seç

uses
   Rtti,
   TypInfo,
   Classes;

function GetSubClassList(AClass: TClass): TStrings;
var 
  atypes:TArray<TRttiType>;
  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 :

Kod: Tümünü seç

ShowMessage(GetSubClassList(TControl).Text);
Cevapla