AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Aufzählungstypen

Ein Thema von tn249 · begonnen am 5. Feb 2006 · letzter Beitrag vom 5. Feb 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#1

Aufzählungstypen

  Alt 5. Feb 2006, 18:31
Hallo,

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

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!)
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Aufzählungstypen

  Alt 5. Feb 2006, 18:39
Integer(High(TFarbe)) + 1
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Aufzählungstypen

  Alt 5. Feb 2006, 18:55
Zitat von Amateurprofi:
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
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#4

Re: Aufzählungstypen

  Alt 5. Feb 2006, 19:03
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;
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Aufzählungstypen

  Alt 5. Feb 2006, 19:18
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
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Aufzählungstypen

  Alt 5. Feb 2006, 19:23
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
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]
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Aufzählungstypen

  Alt 5. Feb 2006, 19:28
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
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Aufzählungstypen

  Alt 5. Feb 2006, 19:52
Dann musst du wohl eine komplette Menge als Konstante deklarieren und von dieser die Bits zählen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Aufzählungstypen

  Alt 5. Feb 2006, 19:56
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);
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Aufzählungstypen

  Alt 5. Feb 2006, 20:35
Moin Jens,

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)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.
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