0
我有一個很多屬性的組件,其中許多屬於類型。如何將屬性列表轉換爲字符串列表?
例如:
BackgroundStyle = [bsSolid, bsGradient, bsNone]
BorderStyle = [bsNone, bsSingle, bsWide]
我建立一個表單,允許用戶配置這些屬性在運行時,我想動態填充一些下拉列表,而不是通過向他們的鍵入手。
這可能嗎?謝謝!
我有一個很多屬性的組件,其中許多屬於類型。如何將屬性列表轉換爲字符串列表?
例如:
BackgroundStyle = [bsSolid, bsGradient, bsNone]
BorderStyle = [bsNone, bsSingle, bsWide]
我建立一個表單,允許用戶配置這些屬性在運行時,我想動態填充一些下拉列表,而不是通過向他們的鍵入手。
這可能嗎?謝謝!
爲此使用RTTI。具體來說,請看TypInfo
單元中的GetPropInfo()
和GetEnumName()
函數。
雷米在這個球上。最近,我只是碰巧做同樣的事情,有點重構(文本編輯器中,所以您的里程可能與編譯器不同):
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>;