Ver Mensaje Individual
  #3  
Antiguo 13-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lepe
Usa High(Tnumeros)
Creo que más bien sería Ord(High(Tnumeros)) + 1

Para el otro caso, la única solución que he encontardo es usando RTTI:

Código Delphi [-]
uses
  TypInfo;

function GetSetTypeCount(SetType: PTypeInfo): Integer;
var
  set_ptd: PTypeData;

  enum_pti: PTypeInfo;
  enum_ptd: PTypeData;

begin
  Assert(SetType.Kind = tkSet);

  set_ptd := GetTypeData(SetType);

  enum_pti := set_ptd.CompType^;
  enum_ptd := GetTypeData(enum_pti);

  Result := enum_ptd.MaxValue + 1;
end;

y sólo funciona si la enumeración- en este caso (uno, dos tres, cuatro, cinco) -comienza en cero y no salta elementos, es decir, para cosas como:

(uno=1, dos, tres, cuatro, cinco) ó
(uno, dos, tres=5, cuatro, cinco)

no funciona.

EDITO:

¡Ah! La función se usaría así:

Count := GetSetTypeCount(TypeInfo(TNumeros));

// Saludos
Responder Con Cita