2010-05-26 13 views
5

To prawdopodobnie będzie "nie", ale czy jest jakiś sposób, abym mógł użyć RTTI Delphi, albo starej szkoły, albo rozszerzonego RTTI w 2010 roku, aby przekazać ciąg znaków zawierający nazwę typu, konkretnie nazwę typ wyliczeniowy i czy daje mi on PTypeInfo dla tego typu? Sprawdziłem przez RTTI.pas i TypInfo.pas i nie widzę żadnej funkcji, która by to zrobiła, ale mogłem coś przeoczyć.Czy mogę uzyskać PTypeInfo z ciągu?

Co Szukam:

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

czy coś takiego. Rzecz w tym, że nazwa wyliczonego typu zostanie przekazana; nie byłby znany podczas kompilacji.

Odpowiedz

10

Następujące elementy powinny działać z kwalifikowaną nazwą.

kwalifikowana nazwa brzmi: 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

To było dokładnie to, czego szukam. Dzięki! –

+0

Dlaczego ta funkcja nie działa dla wyliczeń? –

+0

Powinno działać dla nazwy typu wyliczeniowego. Który różni się od nazw elementów wyliczeniowych. –

Powiązane problemy