Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.11.10;
Скачать: CL | DM;

Вниз

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

 
Cyber Icarus   (2013-02-09 17:28) [0]

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

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) возвращает белиберду.

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


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

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;


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

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

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

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


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


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-10 00:44) [4]

Sapersky   (09.02.13 23:32) [3]

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



Страницы: 1 вся ветка

Текущий архив: 2013.11.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.008 c
15-1369647846
delphistorm
2013-05-27 13:44
2013.11.10
Popularity in UK


15-1369285624
"Добрый Сок"
2013-05-23 09:07
2013.11.10
Это С? Что это делает?


15-1369256090
картман
2013-05-23 00:54
2013.11.10
неправильный вирус


2-1360307264
Camaro
2013-02-08 11:07
2013.11.10
оптимизация sql-запросов с IN


15-1366604147
Sergey Masloff
2013-04-22 08:15
2013.11.10
куда пойти учиться