Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизПолучение значений перечислимого типа Найти похожие ветки
← →
Игорь Шевченко (2003-11-17 10:39) [0]День добрый,
Интересует получение значений произвольного перечислимого типа в виде списка строк в run-time, то есть, имея объявление:
type
TFooBar = (fbOne, fbTwo, fbThree, fbFour);
получить список строк: "fbOne", "fbTwo", "fbThree", "fbFour";
TypInfo.pas просмотрел, готовой функции не нашел :(
Если у кого есть готовый код подобной функции то просьба поделиться, или хотя бы пнуть в направлении, где такой код можно найти :)
Нужно для некоего аналога Object Inspector.
Очень бы хотелось, чтобы код работал как в Delphi5, так и в Delphi6.
Заранее благодарен.
← →
Radionov Alexey (2003-11-17 10:42) [1]в DesignEditors;
класс TEnumProperty не смотрел?
← →
Radionov Alexey (2003-11-17 10:44) [2]Там, кажется, все дороги к GetEnumName из TypeInfo идут
← →
default (2003-11-17 10:56) [3]в "руководстве разработчика" есть примеры по данной теме, если не ошибаюсь(в теме про RTTI)
← →
Юрий Зотов (2003-11-17 11:03) [4]uses
TypInfo;
for i := Low(TFooBar) to High(TFooBar) do
MyStringList.Add(GetEnumName(TypeInfo(TFooBar), i));
← →
Radionov Alexey (2003-11-17 11:10) [5]Type
TVal = (aa,bb,cc);
Procedure TForm1.Button11Click(Sender: TObject);
Var
val : TVal;
Begin
Val := aa;
ShowMessage(GetEnumName(TypeInfo(TVal),Integer(Val)));
End;
← →
default (2003-11-17 11:44) [6]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TypInfo, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyEnumType = (el1, el2, el3);
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetListEnumType(const T: Pointer): TStringList;
var
i: Byte;
EnumTypeData: PTypeData;
begin
// никакой обработки ошибок нет, сделано на скорую руку
Result := TStringList.Create;
EnumTypeData := GetTypeData(GetTypeData(PTypeInfo(T))^.BaseType^);
for i := EnumTypeData^.MinValue to EnumTypeData^.MaxValue do
Result.Add(GetEnumName(PTypeInfo(T), i))
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines := GetListEnumType(TypeInfo(TMyEnumType))
end;
end.
← →
Игорь Шевченко (2003-11-17 11:54) [7]Спасибо всем ответившим, в Пачеко действительно есть готовый код :)
← →
mrcat (2003-11-17 12:43) [8]> Игорь Шевченко ©
Вы решили продолжить тему: "День Золотого Духа" ? :)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c