Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интересный вопрос про типы.


Страницы:   1 2

TrainerOfDolphins ©   (2006-09-20 12:18:00) 

Есть перечисляемый тип:
Type
TSomeType=(val1,val2,val3);
Вопрос:
Есть ли какой-нибудь способ быстро преобразовывать значения val1,val2,val3 в строки ‘val1’,’val2’,’val3’&
Ну скажем некая функция SomeTypeToStr (val: TSomeType):string…
Или только case val of придётся использовать?


PZ   (2006-09-20 12:59:00) [21]

> [3] Игорь Шевченко ©   (20.09.06 12:36)

Я не считаю возможным оспаривать Вас, но мне кажется, что через "case val of" гораздо и гораздо проще.


MBo   (2006-09-20 12:56:00) [22]

for i := Low(TPaletteType) to High(TPaletteType) do begin
   s := GetEnumName(TypeInfo(TPaletteType), Integer(i));


MBo   (2006-09-20 12:56:00) [23]

>только чтобы на входе был не номер значения, а само значение типа TSomeType?

Используй Ord


TrainerOfDolphins   (2006-09-20 12:54:00) [24]

А как узнать количество значений перечисляемого типа?


Игорь Шевченко   (2006-09-20 12:36:00) [25]

unit Test;

interface
{$M+}
type
 TFooBar = (fbOne, fbTwo, fbThree, fbFour);

 TFoo = class
 private
   FFooBar: TFooBar;
 published
   property FooBar : TFooBar read FFooBar write FFooBar;
 end;

implementation

end.


unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   ListBox1: TListBox;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation
uses
 TypInfo, Test;

{$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);
var
 PropInfo : PPropInfo;
begin
 PropInfo := GetPropInfo(TFoo.ClassInfo, 'FooBar');
 ListBox1.Items.Assign(GetListEnumType(PropInfo^.PropType^));
end;

end.


TrainerOfDolphins   (2006-09-20 12:35:00) [26]

Спасибо. Это уже что-то. А есть такая же? только чтобы на входе был не номер значения, а само значение типа TSomeType?


MBo   (2006-09-20 12:20:00) [27]

uses TypInfo
GetEnumName


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо