Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Aufzählungstypen (https://www.delphipraxis.net/62502-aufzaehlungstypen.html)

tn249 5. Feb 2006 17:31


Aufzählungstypen
 
Hallo,

wie kann ich Anzahl der Elemente in meinem selbstdefinierten Typ herausbekommen;

Delphi-Quellcode:
TFarbe = (fBlau, fRot, fGelb);
Ord( High( TFarbe ) ); liefert logischerweise das falsche ergebnis, wenn man selbst werte für zb fGelb = 6 vergibt.

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!)

Amateurprofi 5. Feb 2006 17:39

Re: Aufzählungstypen
 
Delphi-Quellcode:
Integer(High(TFarbe)) + 1

tn249 5. Feb 2006 17:55

Re: Aufzählungstypen
 
Zitat:

Zitat von Amateurprofi
Delphi-Quellcode:
Integer(High(TFarbe)) + 1

Danke für deinen Vorschlag, aber es tut nicht das was ich will;

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

Waldteufel 5. Feb 2006 18:03

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;

tn249 5. Feb 2006 18:18

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:
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;
ergebnis sollte ja eigentlich 8 sein

Gruß
Thomas

Amateurprofi 5. Feb 2006 18:23

Re: Aufzählungstypen
 
Zitat:

Zitat von tn249
Dein Code addiert zu dem Wert des letzten Elements eins dazu, was aber nicht unbedingt gleiche der Anzahl der Element in dem Typ ist.

Thomas,
ja, verstehe was Du meinst.
wie wäre es mit
Delphi-Quellcode:
Integer(High(TFarbe)) - Integer(Low(TFarbe)) + 1
Dann hast Du die Anzahl der Elemente (die eventuell nicht alle benannt sind), auf die man aber trotzdem zugreifen kann.

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]

tn249 5. Feb 2006 18:28

Re: Aufzählungstypen
 
Zitat:

Zitat von Amateurprofi
Ich vermute, du möchtest wissen, wieviel benannte Elemente Dein Typ hat - sorry fällt mir keine Lösung ein.

Gruß, Klaus

Ja das würde ich gerne wissen. Ich wusste nicht, dass die Elemente trotzdem "DA" sind wenn sie keinen Namen haben.

Trotzdem danke
Gruß
Thomas

PS:

Jetzt weiß ich auch warum derhier nicht geht;

Delphi-Quellcode:
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;
edit2: Ergebnis ist auch hier 23

Khabarakh 5. Feb 2006 18:52

Re: Aufzählungstypen
 
Dann musst du wohl eine komplette Menge als Konstante deklarieren und von dieser die Bits zählen.

Jens Schumann 5. Feb 2006 18:56

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);

Christian Seehase 5. Feb 2006 19:35

Re: Aufzählungstypen
 
Moin Jens,

Zitat:

Zitat von Jens Schumann
In welcher Situation benötigt man das?

In den Windows-Header-Dateien gibt es Aufzählungstypen in denen das verwendet wird, ergo kann man es für deren Übersetzung gebrauchen (man kann sogar mehreren Elementen den gleichen Wert zuordnen, auch negative Werte sind möglich)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz