Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как получить все значения энума в строкой массив


Cyber Icarus ©   (2013-02-09 17:28:00) 

Как получить все значения энума в строкой массив, учитывая то, что тип энума так же является строкой.

ti: TTypeInfo;
Values: TArray<string>;

SetLength(Values, MaxV - MinV + 1); // min=0 max=3
ti.Kind := tkEnumeration;
ti.Name := 'TmyAlign'; //TmyAlign = (mLeft, mCenter, mRight, mClient);
for i := MinV to MaxV do begin
  Values[i - MinV] := GetEnumName(PTypeInfo(@ti), i);
end;


Таким образом  получаю AV на строке в цикле, видимо из-за невозможности получить инфу о типе энума. Потому как строка
pd: PTypeData;
pd := GetTypeData(PTypeInfo(@ti));
также (но без AV) возвращает белиберду.

Как сделать правильно?


Cyber Icarus   (2013-02-10 00:44:00) [1]

Sapersky   (09.02.13 23:32) [3]

Спасибо.
Я, правда, уже сам сделал. :)


Sapersky   (2013-02-09 23:32:00) [2]


var
 LContext: TRttiContext;
 LType: TRttiType;
 n, Min, Max : Integer;
begin
 LContext := TRttiContext.Create;
 LType := LContext.FindType('myUnit.TMyAlign');
 Min := LType.AsOrdinal.MinValue;
 Max := LType.AsOrdinal.MaxValue;
 for n := Min to Max do
   Memo1.Lines.Add( GetEnumName(LType.Handle, n) );
 LContext.Free;
end;


Cyber Icarus   (2013-02-09 18:17:00) [3]

У меня нет TMyAlign. У меня есть 'TMyAlign'

т.е.
str: string;
str := 'TMyAlign';

Это все, что мне известно. Хотя, не, еще у меня есть такое
str := 'myUnit.TMyAlign'


Юрий Зотов   (2013-02-09 18:03:00) [4]

procedure TForm1.FormCreate(Sender: TObject);
var
 P: PTypeInfo;
 i: TmyAlign;
begin
 P := TypeInfo(TMyAlign);
 for i := Low(TMyAlign) to High(TMyAlign) do
   Memo1.Lines.Add(GetEnumName(P, Ord(i)))
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо