利用TypInfo单元的GetEnumName和GetEnumValue可以遍历任意枚举类型,并获取其名称和值。下面是示例Demo。
procedure TForm1.btnTestClick(Sender: TObject);
var
p: PTypeData;
i: Integer;
s: String;
pt: PTypeInfo;
begin
ListBox1.Items.Clear;
pt : = TypeInfo(TWindowState);
if pt.Kind <> tkEnumeration then begin
ShowMessage( ' 不是枚举类型 ' );
Exit;
end;
p : = GetTypeData(TypeInfo(TWindowState));
// 将获取的枚举类型信息,以枚举名=枚举值的形式加入到ListBox中
ListBox1.Items.beginUpdate;
try
for i : = p.MinValue to p.MaxValue do begin
S : = GetEnumName(pt,i);
ListBox1.Items.Values[S] : = IntToStr(GetEnumValue(pt, S));
end;
finally
ListBox1.Items.EndUpdate;
end;
end;
var
p: PTypeData;
i: Integer;
s: String;
pt: PTypeInfo;
begin
ListBox1.Items.Clear;
pt : = TypeInfo(TWindowState);
if pt.Kind <> tkEnumeration then begin
ShowMessage( ' 不是枚举类型 ' );
Exit;
end;
p : = GetTypeData(TypeInfo(TWindowState));
// 将获取的枚举类型信息,以枚举名=枚举值的形式加入到ListBox中
ListBox1.Items.beginUpdate;
try
for i : = p.MinValue to p.MaxValue do begin
S : = GetEnumName(pt,i);
ListBox1.Items.Values[S] : = IntToStr(GetEnumValue(pt, S));
end;
finally
ListBox1.Items.EndUpdate;
end;
end;