![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интересный вопрос про типы.
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