2010-05-26 40 views
5

Bu muhtemelen bir "hayır" olacak, ancak bir türün adını, özellikle adını içeren bir dizeyi geçmek için Delphi RTTI, eski okul veya 2010 genişletilmiş RTTI kullanmanın herhangi bir yolu var mı numaralandırılmış bir tür ve bana bu tür için PTypeInfo verilsin mi? RTTI.pas ve TypInfo.pas'a baktım ve bunu yapacak herhangi bir işlev görmüyorum ama bir şeyleri gözden kaçırmış olabilirim. BöyleDizgiden bir PTypeInfo alabilir miyim?

var 
    info: PTypeInfo; 
begin 
    info := GetTypeInfoFromName('TComponentStyle'); 
end; 

Ya bir şey: Ben arıyorum ne

. Şey, sayılan türün adı; derleme zamanında bilinemezdi.

cevap

10

Aşağıdakiler, nitelikli ad ile çalışmalıdır.

Nitelikli Adı: Ben arıyorum tam olarak ne oldu UnitName.TypeName

type 
ETypeNotFound = class(Exception); 

function GetTypeInfoFromName(aTypeName : String) : pTypeInfo; 
var 
C : TRttiContext; 
T : TRttiType; 
begin 
T := C.FindType(aTypeName); 
if Not Assigned(T) then 
    raise ETypeNotFound.CreateFmt('Type %s is not found',[aTypeName]); 

result := T.Handle; 
end; 
+0

. Teşekkürler! –

+0

Bu işlev neden enemler için çalışmıyor? –

+0

Numara türü adı için çalışmalıdır. Numaralandırma öğesi adlarından farklı olanı. –

İlgili konular