Quiero repetir los elementos en una enumeración.Iterar a través de elementos en una enumeración en Delphi
Me gustaría poder decir algo como esto:
type
TWeekdays = (wdMonday, wdTuesday, wdWednesday, wdThursday, wdFriday);
...
elementCount := GetElementCount(TypeInfo(TWeekDays));
for i := 0 to elementCount - 1 do begin
ShowMessage(GetEnumName(TypeInfo(TWeekdays),i));
end;
Lo más cerca que he podido llegar es la siguiente:
function MaxEnum(EnumInfo: PTypeInfo): integer;
const
c_MaxInt = 9999999;
var
i: integer;
s: string;
begin
//get # of enum elements by looping thru the names
//until we get to the end.
for i := 0 to c_MaxInt do begin
s := Trim(GetEnumName(EnumInfo,i));
if 0 = Length(s) then begin
Result := i-1;
Break;
end;
end;
end;
que utilizo como esto:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i, nMax: integer;
begin
ListBox1.Clear;
nMax := MaxEnum(TypeInfo(TWeekdays));
for i := 0 to nMax do begin
ListBox1.Items.Add(GetEnumName(TypeInfo(TWeekdays),i));
end;
end;
que funciona bien, excepto la lista consigo es similar al siguiente (observe los dos últimos puntos):
wdMonday
wdTuesday
wdWednesday
wdThursday
wdFriday
Unit1
'@'#0'ôÑE'#0#0#0#0#0#0#0#0#0#0#0#0#0 <more garbage characters>
Los dos elementos al final obviamente no son lo que quiero.
¿Hay una manera mejor de iterar a través de los elementos de un tipo enumerado?
Si no es así, es seguro asumir que habrá siempre ser exactamente dos artículos adicionales usando mi método actual? Obviamente, uno es el nombre de la Unidad ... pero, ¿qué está haciendo el símbolo "@"? ¿Es realmente basura, o es más información tipo?
Estoy usando Delphi 2007. Gracias por cualquier idea.
Ok, soy un idiota. Intenté esto antes, pero dejé mi "el" como un número entero y no me di cuenta de mi error. Gracias. – JosephStyons
Aún me pregunto qué significa "@". –
JosephStyons
MaxEnum probablemente tiene errores; devolviendo más que el recuento real de enumeraciones. Y GetEnumName usa ese resultado erróneo para analizar las estructuras internas en su código. Lo que obtienes son trozos de memoria al azar más allá de las estructuras internas. –