A las bravas, mira este ejemplo de casting forzado:
Código Delphi
[-]
type
TEnum1 = (a1, b1, c1);
PEnum1 = ^TEnum1;
TEnum2 = (a2, b2, c2);
PEnum2 = ^TEnum2;
procedure ejemplo(const aValor: TEnum1);
var
E1: TEnum1;
E2: TEnum2;
begin
E1:= (PEnum1(@aValor))^;
E2:= (PEnum2(@aValor))^;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ejemplo(a1);
end;
Usando el cast de punteros puedes forzar la conversión a cualquier cosa, como en C.
Saludos.