procedure GetEnumNameList(TypeInfo: PTypeInfo;str:TStrings);
var i:integer;
var T: PTypeData;
var s:string;
begin
 T := GetTypeData(GetTypeData(TypeInfo)^.BaseType^);
 for i:=T^.MinValue to T^.MaxValue do
 begin
   s:= GetEnumName(TypeInfo , i);
  if s<>'' then str.Add(s) else break;
 end;
end;