Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.27;
Скачать: 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 вся ветка

Текущий архив: 2003.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.017 c
3-89739
Developerr
2003-11-10 20:51
2003.11.27
Yaffil SQL Server Login и Password


11-89800
tamerlan311
2003-03-20 16:43
2003.11.27
плагин включающий не модальную форму!


1-89825
Slym
2003-11-14 10:49
2003.11.27
Большие целые числа (128бит) и математические операции с ними


7-90155
Дмитрий
2003-09-17 14:27
2003.11.27
TVaComm в win2k и win98


3-89785
ruslan_as
2003-11-06 16:40
2003.11.27
Как вывести отчет из 90 записей на 1 бланк