2009-12-13 138 views
4

的這一行代碼:如何將枚舉類型轉換爲字符串列表?

ShowMessage(GetEnumName(TypeInfo(TAlign), 1)); 

返回 「是alTop」。

當我想使用字符串變量時,如何將枚舉類型的所有值轉換爲字符串列表:'TAlign'而不是TAlign?喜歡的東西:

ShowMessage(GetEnumName(TypeInfo('TAlign'), 1)); 

感謝名單

+0

這其實是在問*兩個*的問題。首先是如何得到一個枚舉值的名稱列表,另一個是如何獲得給定類型*字符串名*的PTypeInfo指針。我建議將其分成兩個帖子。 – 2009-12-13 22:43:01

回答

7

爲了能夠使用一個字符串變量,你需要在某種查找表中的字符串登記所屬類別,然後看看它。

爲了讓所有在列表中的枚舉類型的名稱,你可以做這樣的事情:

procedure LoadAllEnumValuesIntoStringList(enum: PTypeInfo; list: TStringList); 
var 
    data: PTypeData; 
    i: integer; 
begin 
    list.clear; 
    data := GetTypeData(GetTypeData(enum)^.BaseType^); 
    for i := 0 to data.MaxValue do 
     list.add(GetEnumName(enum, i)); 
end; 
+0

也許有可能走一條typeinfo的鏈?他們是否可以鏈接或提交?無論如何+1爲唯一的編譯器和-version不可知的解決方案 – 2009-12-13 22:29:42

+0

這不完全是我想要的。我不知道如何將字符串更改爲PTypeInfo。您可以嘗試按照以下方式重寫它: 過程LoadAllEnumValuesIntoStringList(Enum:String; list:TStringList); 我需要這個功能才能像delphi一樣製作類似的對象檢查器。我想在運行時使用它。我可以將所有已發佈的屬性及其對象的類型作爲stringlist獲取。這就是爲什麼類型TAlign被寫爲'TAlign'。我想把這個字符串('TAlign')傳遞給適當的程序,它將與TAlign的所有成員一起填充組合框。所以我可以輕鬆編輯項目。 – lyborko 2009-12-13 23:01:49

+0

有一個錯誤。你應該寫: data:= GetTypeData(GetTypeData(enum)^。BaseType ^); 你很擅長在沒有編譯器的情況下手動編寫它... – lyborko 2009-12-13 23:09:10

相關問題