![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить все значения энума в строкой массив
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;