AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prüfen ob Integer im Enumeration-Type enthalten ist
Thema durchsuchen
Ansicht
Themen-Optionen

Prüfen ob Integer im Enumeration-Type enthalten ist

Ein Thema von Keks · begonnen am 25. Jan 2015 · letzter Beitrag vom 27. Jan 2015
Antwort Antwort
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#1

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 17:17
Beim Debuggen sehe ich:
Delphi-Quellcode:
mb := TMeinBeispiel(1); //mb = mbZwei
mb := TMeinBeispiel(4); //mb = (out of bound) 4
Der Debugger stellt hierbei doch auch irgendwie fest, ob der Wert unter den vorgegebenen Werten ist oder nicht. Man selbst kann das aber nicht tun?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.353 Beiträge
 
Delphi 12 Athens
 
#2

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 17:26
k.A. wo der Debugger die Werte her holt, aber in der einkompilierten RTTI fehlt ganz einfach die Liste der Namen, sobald man selber die Werte zuweist.
Und die neue erweiterte RTTI geht bei Enums IMHO auch nur auf die alte RTTI.

Es wird dafür ein Array verwendt, wie man es z.B. von der Registry und anderen WinAPIs kennt.
'NameFürWert0'#0'NameFürWert1'#0'NameFürWert2'#0'NameFürWert3'#0#0
Und wenn man jetzt Werte weg lässt, dann entstünde #0#0, was ja dem Listenende entspricht, und die Liste wäre unvollständig/kaputt. Darum lässt der doofe Compiler/Linker diese Liste einfach ganz weg, anstatt z.B. einen "Dummy"-Wert einzufügen oder eine andere Speicherstruktur zu benutzen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Jan 2015 um 17:30 Uhr)
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#3

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 17:46
k.A. wo der Debugger die Werte her holt, aber in der einkompilierten RTTI fehlt ganz einfach die Liste der Namen, sobald man selber die Werte zuweist.
Moment, aber ich brauche doch gar nicht die Namen, sondern nur die Zahlen-Werte!?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.353 Beiträge
 
Delphi 12 Athens
 
#4

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 17:58
Es werden aber nicht die Zahlen gespeichert, sondern die Namen, in einem indizierten Array. (Index = Zahl )

Als Zahl ist alles im Wertebereich des Speichertyps gültig.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Jan 2015 um 18:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 18:06
Die einfachste Art ist doch hier
Delphi-Quellcode:
type
  TMeinBeispiel = ( mbEins, mbZwei, mbDrei );
const
  MeinBeispielValues : array[TMeinBeispiel] of integer = ( 0, 1, 5 );
Wenn man das jetzt noch in einen Record packt, der die Umwandlung vornimmt, dann hat man doch alles zusammen und kann nach Belieben hin- und her konvertieren und das auch noch voll automatisch.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#6

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 20:04
Sorry, aber irgendwie verstehe ich Dein Beispiel nicht ... oder ich stehe auf dem Schlauch.
MeinBeispielValues[mbDrei] = 5 aber was mache ich damit? Die Zuordnung Ord(mbDrei) = 5 hatte ich doch vorher schon?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.353 Beiträge
 
Delphi 12 Athens
 
#7

AW: Prüfen ob Integer im Enumeration-Type enthalten ist

  Alt 25. Jan 2015, 20:10
Nein.

Ord(mbDrei) = 2

Der Enum ist "einfach", besitzt eine vollständige RTTI, aber diehn nur der als Namensliste.
Die eigentlichen Werte sind aber extern abgelegt und werden nur für's Casten benutzt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Jan 2015 um 20:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:37 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