Delphi-PRAXiS

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

Bjoerk 16. Aug 2015 09:37

Delphi-Version: 2007

Aufzählungstypen quasi kombinieren
 
Ich hab öfter folgende Situation, zum Beispiel so:
Delphi-Quellcode:
TSomeTyp = (stEins, stZwei, stDrei, stVier, stFuenf);

TSomeStyle = (ssEins, ssZwei, ssDrei, ssSechs, ssSieben, ssAcht, ssNeun);
Im Beispiel steten Eins, Zwei und Drei je für das Selbe.

Gibt es eine Chance den zweiten Aufzählungstyp irgendwie so aufzubauen
Delphi-Quellcode:
"TSomeStyle" = "TSomeTyp" - "[stVier, stFuenf]" + "[ssSechs, ssSieben, ssAcht, ssNeun]";
also irgendwie wohl mit integer aber dennoch sprechende Bezeichner? :gruebel:

Bernhard Geyer 16. Aug 2015 09:47

AW: Aufzählungstypen quasi kombinieren
 
Nein!

Binär ist stEins = ssEins.
Wie sollte da der Compiler/Lauffähige Programm das später unterscheiden können.

Wieso willst du kombinieren?
AFAIK könnt es gehen wenn du einen gemeinsamen Typ definierst und später darauf eingeschränkte Typen ableitet.

bernau 16. Aug 2015 13:03

AW: Aufzählungstypen quasi kombinieren
 
Zitat:

Zitat von Bjoerk (Beitrag 1312279)
Ich hab öfter folgende Situation, zum Beispiel so:
Delphi-Quellcode:
TSomeTyp = (stEins, stZwei, stDrei, stVier, stFuenf);

TSomeStyle = (ssEins, ssZwei, ssDrei, ssSechs, ssSieben, ssAcht, ssNeun);
Im Beispiel steten Eins, Zwei und Drei je für das Selbe.

Gibt es eine Chance den zweiten Aufzählungstyp irgendwie so aufzubauen
Delphi-Quellcode:
"TSomeStyle" = "TSomeTyp" - "[stVier, stFuenf]" + "[ssSechs, ssSieben, ssAcht, ssNeun]";
also irgendwie wohl mit integer aber dennoch sprechende Bezeichner? :gruebel:

Dann stehen die ja die Typen
Delphi-Quellcode:
 ssEins, ssZwei, ssDrei
nicht mehr zur Verfügung.

Hast du die Typen selber definiert? Oder sind die aus einer Komponente, die du als Vorgabe hinnehmen must?

Wenn dir der Präfix egal ist und für alle gleich sein kann, dann kannst du auch mit Sets arbeiten.

Delphi-Quellcode:
type

TSomeTyp = (stEins, stZwei, stDrei, stVier, stFuenf, stSechs, stSieben, stAcht, stNeun);

TSomeTypSet = Set of TSomeTyp;

const

TSomeSubset1 = [stEins, stZwei, stDrei, stVier, stFuenf];

TSomeSubset2 = [stEins, stZwei, stDrei, stSechs, stSieben, stAcht, stNeun];

Dann kannst du mit folgendem prüfen

Delphi-Quellcode:
if SomeType in TSomeSubset1 then
Nicht ganz deine gewünschte Lösung. Aber vielleicht ein Ansatz.

Uwe Raabe 16. Aug 2015 14:20

AW: Aufzählungstypen quasi kombinieren
 
Keine Ahnung, ob das hier was bringt, aber der Vollständigkeit halber:

Delphi-Quellcode:
type
  TSomeBase = (ssEins, ssZwei, ssDrei, ssVier, ssFuenf, ssSechs, ssSieben, ssAcht, ssNeun);
  TSomeSet = set of TSomeBase;

  TSomeFirst = ssEins..ssDrei;
  TSomeMiddle = ssVier..ssFuenf;
  TSomeLast = ssSechs..ssNeun;

  TSomeTyp = ssEins..ssFuenf;

const
  TSomeStyle: TSomeSet = [ssFirst..ssDrei, ssSechs..ssNeun];

Bjoerk 16. Aug 2015 18:46

AW: Aufzählungstypen quasi kombinieren
 
Ja, sind eigene Typen (und Präfixe). Das const kann ich hier nicht gebrauchen (brauche z.B. FSomeMenuItems: array [0..cMaxCount - 1, TSomeTyp] of TMenuItem) aber das bringt mich schon mal weiter, vielen Dank Gerd und Uwe (auch für den link zum Pascal Analyzer). Meine Frage zielte auch darauf ab, was macht man wenn es mehr als 256 Elemente gibt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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