Вниз
Скачать: CL | DM;

Получение значений перечислимого типа   Найти похожие ветки 

← →
Игорь Шевченко ©   (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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.014 c
1-89828
evgeniy132
2003-11-17 05:54
2003.11.27
Поиск символа в строке


3-89707
Alex-kosmonavt
2003-11-10 12:39
2003.11.27
Выгрузить в Эксель


8-90001
Trekk
2003-07-28 14:24
2003.11.27
Как сделать слои?


3-89714
AlexiNx
2003-11-03 18:31
2003.11.27
Fast Report


1-89849
Cash
2003-11-16 17:12
2003.11.27
Как работать с RGB




   Наверх