Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String im Wertebereich eines Aufzählungstypen (https://www.delphipraxis.net/72336-string-im-wertebereich-eines-aufzaehlungstypen.html)

TheAn00bis 28. Jun 2006 18:38


String im Wertebereich eines Aufzählungstypen
 
Hey,

Wenn ich prüfen möchte, ob der Inhalt eines Strings im Wertebereich eines Aufzählungstypen ist, geht das dann nur über Fallunterscheidungen?

Beispiel:

So würde ich es im Moment machen:

Delphi-Quellcode:
type test = (atest, btest);

//...

function xyz(pString: String): boolean;
begin
   if (pString = 'aTest') or (pString = 'bTest') then result:=true
   else result := false;
end;
Geht das auch einfacher?

ichbins 28. Jun 2006 18:39

Re: String im Wertebereich eines Aufzählungstypen
 
Nein, da die Werte des Aufzähungstypen ja keine Strings, sondern nur Integer-Konstanten (oder so was ähnliches) sind.´

Zitat:

if (pString = 'aTest') or (pString = 'bTest') then result:=true
else result := false;
einfacher:
Delphi-Quellcode:
result:=(pstring='atest') or (pstring='btest');
Bei Vergleichen oder logischen Operatoren kommt schon ein Boolean raus.

negaH 28. Jun 2006 18:41

Re: String im Wertebereich eines Aufzählungstypen
 
Du kannst die Funtionen aus Unit TypInfo dazu benutzen. Damit greifst du dann zur Laufzeit auf exakt die Typdefinitionen deines Sources zu. Der Compiler speichert nämlich als RTTI alle deine Strings deines Enums.

Schau dir einfach mal Unit TypInfo.pas genauer an.

[edit]
ichbins, war da wohl schneller. Und aus dem kategorischen NEIN wird ein definitives JA ;)
[/edit]

Gruß Hagen

ichbins 28. Jun 2006 18:46

Re: String im Wertebereich eines Aufzählungstypen
 
aber das ist doch nicht "sauber" ;)
Oder zumindest wurde es nicht so von der Delphi-Language beabsichtigt.

*mich geschlagen geb*

TheAn00bis 28. Jun 2006 19:51

Re: String im Wertebereich eines Aufzählungstypen
 
Danke, negaH!

Mit

Delphi-Quellcode:
GetEnumName(TypeInfo(ttest),i);
ist das wunderbar. :)

Edit: Wobei das mit GetEnumValue() hier sogar noch besser zu lösen ist.

negaH 29. Jun 2006 16:07

Re: String im Wertebereich eines Aufzählungstypen
 
Zitat:

ber das ist doch nicht "sauber"
Oder zumindest wurde es nicht so von der Delphi-Language beabsichtigt.
Doch absolut sauber und absolut so beabsichtigt. Das Besondere an der VCL ist es das sie zur Designzeit und Laufzeit über zb. den OI oder Klassenexplorer dir Unterstützung bieten kann. Das war das Argument eines RAD Systems. Und um das zu können gibts die RTTI durch den Compiler erzeugt und die Schnittstelle zu dieser RTTI ist die Unit TypInfo. Eine DFM zb. speichert ja auch eine ENUM Poperty einer Komponente im Klartext, oder im OI kannst du eine solche ENUM Property im Klartext zb. bei .BorderIcons = [biMaximize, biMinimize] einstellen oder ? Nun exakt das wird über die RTTIs und Unit TypInfo gemacht, egal ob zur Designzeit oder Laufzeit. Denn zu Laufzeit muß ja ein Formular als DFM Resource geladen werden und in diesem Moment benötigt der VCL Code wiederum diese ENUM Bezeichner im Klartext. (ENUMs == SETs == Mengen)

Ergo: Borland hat das mit voller Absicht so konstruiert, für seine und auch für unsere Zwecke ;) Die reguläre Schnittstelle zur RTTI ist Unit TypInfo.pas.

Gruß Hagen


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