Форум: "Начинающим";
Текущий архив: 2013.11.10;
Скачать: [xml.tar.bz2];
ВнизКак получить все значения энума в строкой массив Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c