![]() |
Aufzählungstypen
Hallo,
wie kann ich Anzahl der Elemente in meinem selbstdefinierten Typ herausbekommen;
Delphi-Quellcode:
Ord( High( TFarbe ) ); liefert logischerweise das falsche ergebnis, wenn man selbst werte für zb fGelb = 6 vergibt.
TFarbe = (fBlau, fRot, fGelb);
Wie bekomm ich die Anzahl der Element raus? Gibts da ne Funktion, weil mit Precc() und while schleife gehts auch nur, wenn mans unschön in nen exception block reinpackt Gruß Thomas PS: benutze d2005pe (von der dp, danke dafür übrigens!) |
Re: Aufzählungstypen
Delphi-Quellcode:
Integer(High(TFarbe)) + 1
|
Re: Aufzählungstypen
Zitat:
Dein Code addiert zu dem Wert des letzten Elements eins dazu, was aber nicht unbedingt gleiche der Anzahl der Element in dem Typ ist. Gruß Thomas |
Re: Aufzählungstypen
Mir fiele spontan eine Quick-&-Dirty-Lösung ein: (ungetestet)
Delphi-Quellcode:
var
a : array[TMeinTyp] of byte; i : integer; begin i := Length(a); end; |
Re: Aufzählungstypen
das liefert leider das gleiche ergebnis, wie der vorherige vorschlag.
ich stell jetzt hier trotzdem mal meinen code rein, vielleicht mach ich ja nen methodischen fehler, der mir nicht auffällt;
Delphi-Quellcode:
ergebnis sollte ja eigentlich 8 sein
type
TtnCardFace = (cfSeven, cfEight, cfNine, cfTen, cfJack, cfQueen, cfKing, cfAce=22); [..] procedure TMainForm.Button5Click(Sender: TObject); var a: array[TtnCardFace] of Byte; begin ShowMessage(IntToStr(Length(a))); //ergibt 23 (=22+1) ShowMessage(IntToStr(Integer(High(TFarbe)) + 1); // auch 23 ShowMessage(IntToStr(Ord(High(TFarbe)) + 1); // auch 23 end; Gruß Thomas |
Re: Aufzählungstypen
Zitat:
ja, verstehe was Du meinst. wie wäre es mit
Delphi-Quellcode:
Dann hast Du die Anzahl der Elemente (die eventuell nicht alle benannt sind), auf die man aber trotzdem zugreifen kann.
Integer(High(TFarbe)) - Integer(Low(TFarbe)) + 1
Ich vermute, du möchtest wissen, wieviel benannte Elemente Dein Typ hat - sorry fällt mir keine Lösung ein. Gruß, Klaus [edit=Sharky]Ich habe mich nur mal um die "Quoting-Tags" gekümmer ;-) Mfg, Sharky[/edit] |
Re: Aufzählungstypen
Zitat:
Trotzdem danke Gruß Thomas PS: Jetzt weiß ich auch warum derhier nicht geht;
Delphi-Quellcode:
edit2: Ergebnis ist auch hier 23
procedure TMainForm.Button5Click(Sender: TObject);
var Value: Integer; Elements: Integer; begin Value := Ord(Low(TtnCardFace)); Elements := 1; while (Value <> Ord(High(TtnCardFace))) do begin Value := Succ(Value); Inc(Elements); end; ShowMessage(IntToStr(Elements)); end; |
Re: Aufzählungstypen
Dann musst du wohl eine komplette Menge als Konstante deklarieren und von dieser die Bits zählen.
|
Re: Aufzählungstypen
Hallo,
ich programmiere jetzt seit ca 23 Jahren. Das man einem Aufzählungstypen explizit einen Wert zuweisen cfAce=22 kann habe ich noch nie benötigt. D.h. ich habe nicht einmal gewußt das es unterstützt wird. In welcher Situation benötigt man das?
Delphi-Quellcode:
TtnCardFace = (cfSeven, cfEight, cfNine, cfTen,
cfJack, cfQueen, cfKing, cfAce=22); |
Re: Aufzählungstypen
Moin Jens,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz