2010-05-26 32 views
5

Điều này có lẽ sẽ là "không", nhưng có cách nào tôi có thể sử dụng RTTI của Delphi, hoặc là trường học cũ hoặc RTTI mở rộng năm 2010, để vượt qua trong một chuỗi có chứa tên của một loại, cụ thể là tên của một loại liệt kê, và có nó cho tôi PTypeInfo cho loại đó? Tôi đã xem qua RTTI.pas và TypInfo.pas và tôi không thấy bất kỳ chức năng nào có thể làm điều đó, nhưng tôi có thể đã bỏ sót một thứ gì đó.Tôi có thể lấy PTypeInfo từ một chuỗi không?

Những gì tôi đang tìm kiếm:

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

Hoặc một cái gì đó như thế. Thing là, tên của kiểu liệt kê sẽ được chuyển vào; nó sẽ không được biết đến lúc biên dịch.

Trả lời

10

Sau đây phải làm việc với tên đủ điều kiện.

Qualified Tên là: 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

Đó là chính xác những gì tôi đang tìm kiếm. Cảm ơn! –

+0

Tại sao chức năng này không hoạt động đối với enums? –

+0

Nó sẽ hoạt động với tên kiểu enum. Khác với tên phần tử đếm. –

Các vấn đề liên quan