Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Gegenteil von ORD?


Tower - Fr 21.02.03 10:31
Titel: Gegenteil von ORD?
Ähm...

mal eine ganz blöde Frage: Folgendes Code-Segment...


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  TAufzaehlung = (abc, def, ghi, jkl);

var
  Aufzaehlung: TAufzaehlung

[...]
  Aufzaehlung := def;
  IrgendeinInteger := Ord(Aufzaehlung);
[...]


... setzt ja IrgendeinInteger auf 1, sprich: Ord gibt mir die "Position" in einem Aufzählungstyp zurück.

Wie mache ich das denn umgekehrt? Wie kann ich "Aufzaehlung" auf zB den dritten Eintrag von TAufzaehlung setzen? (soll natürlich über die "3" funktionieren, nicht über das "jkl" :-) )


Danke!


AXMD - Fr 21.02.03 10:47

Hi,

setzen kannst du zur Laufzeit gar nichts (du kannst deinen Typ ja nicht einfach zur Laufzeit ändern) - wenn du das meinst.

AXMD


Tino - Fr 21.02.03 10:55

So:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
  Aufzaehlung: TAufzaehlung;
  Idx: Integer;
begin
  Aufzaehlung := ghi;

  Idx := Ord (Aufzaehlung);

  Aufzaehlung := TAufzaehlung (Idx);
end;

Sinnvoll wäre es auch die Variable Idx vor dem Typecast [also: TAufzaehlung (Idx) ] auf einen gültigen Wert zu überprüfen.

Gruß
TINO


Tower - Fr 21.02.03 10:55

Nein, den Typ will ich gar nicht anfassen. Ich möchte, dass nach sowas wie...


Quelltext
1:
  Aufzaehlung := IrgendeineFunktion(3);                    


... Aufzaehlung=jkl ist.


smiegel - Fr 21.02.03 11:03

Hallo Tower,

das ist ja eigentlich der Sinn von Aufzählungen, dass ich Sie über den symbolischen Namen ansprechen kann.


Quelltext
1:
  Aufzaehlung:=TAufzaehlung(3);                    


Achtuing: Zählung beginnt mit 0.


Tower - Fr 21.02.03 11:04

Mpf. So einfach... alles klar, danke!

@smiegel: Hast prinzipiell natürlich völlig recht. Ich brauche das in dem Fall aber, weil ich den Inhalt von ein paar Aufzählungsvariablen in der Registry speichern will. Und das geht so halt ganz gut...