![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить список допустимых констант для перечисления
PRM © (2004-11-01 16:26:00)Здравствуйте. Необходимо получить список констант перечисления, типа вот так как ниже,только необходимо вместо TBrushStyle имя перечисления необходимо задавать строкой
procedure BrushStylesAsStrings(AList: TStrings);
var
a: integer;
pInfo: PTypeInfo;
pEnum: PTypeData;
begin
AList.Clear;
pInfo := PTypeInfo(TypeInfo(TBrushStyle));
pEnum := GetTypeData(pInfo);
with pEnum^ do
begin
for a := MinValue to MaxValue do
AList.Add(GetEnumName(pInfo, a));
end;
end
Юрий Зотов (2004-11-02 13:26:00) [1]> PRM (02.11.04 09:48) [2]
Сорри, нечетко понял вопрос.
Можно сделать гораздо проще:
uses
TypInfo;
type
TMyEnum = (me0, me1, me2);
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i := Ord(Low(TMyEnum)) to Ord(High(TMyEnum)) do
ListBox1.Items.Add(GetEnumName(TypeInfo(TMyEnum), i))
end;
PRM (2004-11-02 09:48:00) [2]Чёто не понял.........TBrushStyle перечисление, а не класс......
Разве Get/FindClass позволяет получать информацию о перечислениях????
Вообще я решил задачу по другому. Я использовал не тип перечисления, свойство объекта, заданного типа......Получилось следующее
procedure TEnumPropElementsAsStrings(Obj:TObject;PropName:String;AList:
TStrings);
var
i: integer;
pInfo: PTypeInfo;
pEnum: PTypeData;
begin
AList.Clear;
pInfo:=GetPropInfo(Obj,PropName)^.PropType^;
if pInfo.Kind=tkEnumeration then
begin
pEnum := GetTypeData(pInfo);
with pEnum^ do
begin
for i := MinValue to MaxValue do
AList.Add(GetEnumName(pInfo, i));
end;
end
else
Raise Exception.Create('Свойство не является перечислением!');
end;
Юрий Зотов (2004-11-01 16:40:00) [3]Если строка - имя класса, то Get/FindClass дают ссылку на класс по его строковому имени. Подставляете вместо TBrushStyle и все.
Если же это просто любая строка, то придется делать ручками.