的這一行代碼:如何將枚舉類型轉換爲字符串列表?
ShowMessage(GetEnumName(TypeInfo(TAlign), 1));
返回 「是alTop」。
當我想使用字符串變量時,如何將枚舉類型的所有值轉換爲字符串列表:'TAlign'而不是TAlign?喜歡的東西:
ShowMessage(GetEnumName(TypeInfo('TAlign'), 1));
感謝名單
的這一行代碼:如何將枚舉類型轉換爲字符串列表?
ShowMessage(GetEnumName(TypeInfo(TAlign), 1));
返回 「是alTop」。
當我想使用字符串變量時,如何將枚舉類型的所有值轉換爲字符串列表:'TAlign'而不是TAlign?喜歡的東西:
ShowMessage(GetEnumName(TypeInfo('TAlign'), 1));
感謝名單
爲了能夠使用一個字符串變量,你需要在某種查找表中的字符串登記所屬類別,然後看看它。
爲了讓所有在列表中的枚舉類型的名稱,你可以做這樣的事情:
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;
也許有可能走一條typeinfo的鏈?他們是否可以鏈接或提交?無論如何+1爲唯一的編譯器和-version不可知的解決方案 – 2009-12-13 22:29:42
這不完全是我想要的。我不知道如何將字符串更改爲PTypeInfo。您可以嘗試按照以下方式重寫它: 過程LoadAllEnumValuesIntoStringList(Enum:String; list:TStringList); 我需要這個功能才能像delphi一樣製作類似的對象檢查器。我想在運行時使用它。我可以將所有已發佈的屬性及其對象的類型作爲stringlist獲取。這就是爲什麼類型TAlign被寫爲'TAlign'。我想把這個字符串('TAlign')傳遞給適當的程序,它將與TAlign的所有成員一起填充組合框。所以我可以輕鬆編輯項目。 – lyborko 2009-12-13 23:01:49
有一個錯誤。你應該寫: data:= GetTypeData(GetTypeData(enum)^。BaseType ^); 你很擅長在沒有編譯器的情況下手動編寫它... – lyborko 2009-12-13 23:09:10
這其實是在問*兩個*的問題。首先是如何得到一個枚舉值的名稱列表,另一個是如何獲得給定類型*字符串名*的PTypeInfo指針。我建議將其分成兩個帖子。 – 2009-12-13 22:43:01