Главная страница
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
6-1269943391
ZeTToG350
2010-03-30 14:03
2013.11.10
Вопрос по IdMappedPortTCP


15-1369703482
Сергей
2013-05-28 05:11
2013.11.10
Нормализованое число


6-1269002967
Domkrat
2010-03-19 15:49
2013.11.10
Login на Google


6-1269926058
alekseyi
2010-03-30 09:14
2013.11.10
TClientSocket 10022 Error


15-1369034958
>|<
2013-05-20 11:29
2013.11.10
Защита приложения