Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-04-2005
febito febito is offline
Miembro
 
Registrado: dic 2003
Posts: 28
Poder: 0
febito Va por buen camino
Cantidad de elementos de un tipo set

Hola necesito ayuda para saber como averiguar la cantidad de elementos que tiene un type "set"
Gracias a todos.
Responder Con Cita
  #2  
Antiguo 13-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Depende de como esté declarado:

Código Delphi [-]
type TNumeros = (uno=0, dos, tres, cuatro, cinco);
type TSetNumeros = set of Numeros;
Usa High(Tnumeros)

Código Delphi [-]
type TNumeros = set of (uno, dos, tres, cuatro, cinco);
Para este caso no sabría decirte

Espero te sirva.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #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
Poder: 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
  #4  
Antiguo 14-04-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Muchas gracias por la correccion roman.

ahh.. por cierto, ese código es delphi ??

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 05:52:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi