В таком виде ничего сделать нельзя, т.к. для подобных типов RTTI не генерируется, а pred и succ работают неправильно (они воспринимают данный тип не как enum, а как integer).
Зато есть workaround с минимальными добавлениями. Фактически, мы создаем рядом с типом константный массив и используем его для подобной проверки вместо самого типа:
Код:
type
TMyList = (mlOne = 1, mlFive = 5);
const
TMyListValues : Array [1..2] Of TMyList = (mlOne, mlFive);
function BoolToStr(value : Boolean) : String;
begin
if Value then Result := 'true' else Result := 'false';
end;
function isDefined(value : Integer) : Boolean;
var
I : Integer;
begin
for I := Low(TMyListValues) to High(TMyListValues) do
begin
Result := value = Ord(TMyListValues[i]);
if Result then Break;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
iTmp1, iTmp2: integer;
begin
iTmp1 := 2;
iTmp2 := 1;
ShowMessage('iTmp1 = ' + BoolToStr(isDefined(iTmp1)) + ', iTmp2 = ' + BoolToStr(isDefined(iTmp2)));
end;
В результате работы получаем следующее сообщение:
Код:
iTmp1 = false, iTmp2 = true