Solange ich die Kontrolle über die Enums habe, verwende ich dann folgende Herangehensweise:
Delphi-Quellcode:
type
TEnum = (eOne, eTwo, eThree, eFour);
TEnumHelper = record helper for TEnum
public
function GetAsInteger: Integer;
procedure SetAsInteger(const Value: Integer);
property AsInteger: Integer read GetAsInteger write SetAsInteger;
end;
function TEnumHelper.GetAsInteger: Integer;
begin
Result := Ord(Self) + 1;
end;
procedure TEnumHelper.SetAsInteger(const Value: Integer);
begin
Self := TEnum(Value - 1);
end;
In Fällen, wo die Integer-Werte Bestandteil eines externen Records sind, kann man das dann so lösen:
Delphi-Quellcode:
type
TMyRecord = record
private
{ ein paar Felder }
FEnumInt: Integer; // oder Byte, Word...
{ noch ein paar Felder }
function GetEnum: TEnum;
procedure SetEnum(const Value: TEnum);
public
property Enum: TEnum read GetEnum write SetEnum;
end;
function TMyRecord.GetEnum: TEnum;
begin
Result.AsInteger := FEnumInt;
end;
procedure TMyRecord.SetEnum(const Value: TEnum);
begin
FEnumInt := Value.AsInteger;
end;