2013-07-15 76 views
0

我有一個很多屬性的組件,其中許多屬於類型。如何將屬性列表轉換爲字符串列表?

例如:

BackgroundStyle = [bsSolid, bsGradient, bsNone] 

BorderStyle = [bsNone, bsSingle, bsWide] 

我建立一個表單,允許用戶配置這些屬性在運行時,我想動態填充一些下拉列表,而不是通過向他們的鍵入手。

這可能嗎?謝謝!

回答

1

爲此使用RTTI。具體來說,請看TypInfo單元中的GetPropInfo()GetEnumName()函數。

0

雷米在這個球上。最近,我只是碰巧做同樣的事情,有點重構(文本編輯器中,所以您的里程可能與編譯器不同):

class function TEnumerationRoutines.TitleCaseDescriptionFromOptions<T>: TStrings; 
var 
    LRttiContext : TRttiContext; 
    LRttiEnumerationType: TRttiEnumerationType; 
    LTypeInfo : Pointer; 
    LPTypeInfo : PTypeInfo; 
    lp: Integer; 
begin 
    LTypeInfo := TypeInfo(T); 

    LPTypeInfo := PTypeInfo(LTypeInfo); 
    if LPTypeInfo^.Kind <> tkEnumeration then 
    raise Exception.Create('Type is not an enum'); 

    Result := TStringList.Create; 

    LRttiEnumerationType := LRttiContext.GetType(LTypeInfo) as TRttiEnumerationType; 

    for lp := LRttiEnumerationType.MinValue to LRttiEnumerationType.MaxValue do 
    Result.Add(GetEnumName(LTypeInfo, Ord(lp))); 
end; 

,並稱之爲:

MyStrings := TEnumerationRoutines.TitleCaseDescriptionFromOptions<BackgroundStyle>; 

MyStrings := TEnumerationRoutines.TitleCaseDescriptionFromOptions<BorderStyle>;