Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RTTI published/Aufzählung (https://www.delphipraxis.net/85822-rtti-published-aufzaehlung.html)

Gruber_Hans_12345 5. Feb 2007 12:21


RTTI published/Aufzählung
 
Warum funktionieren keine Aufzählungen als published Elemente, die folgend aufgebaut sind
(da ich von integer und const umsteigen will auf einen Aufzählungstyp, wäre es praktischer, wenn ich die Namen/Werte 1:1 übernehmen kann und nicht einen dummy einfügen muß oder gar die Werte anpassen muß)


das funktioniert nicht, er kennt den Typ dann nicht als published
Delphi-Quellcode:
   TMyFieldType = (
        hftUnknown           = 0
        ...
       , hftBoolean         = 16
       , hftCallBack        = 18
   );

hier würde es funktionieren
Delphi-Quellcode:
   TMyFieldType = (
        hftUnknown           = 0
        ...
       , hftBoolean         = 16
       , hftCallBack        = 17
   );
warum ist das so?

shmia 5. Feb 2007 16:41

Re: RTTI published/Aufzählung
 
Bei Delphi 5 war es noch nicht erlaubt in einem Aufzählungstyp die Werte vorzugeben.
Also muss das ein neues Feature von Delphi 6 sein.

Vermutung:
wie das dann so ist beim Programmieren: neue Features werden zwar eingeführt,
sind aber nicht unbedingt durchgängig verfügbar.

Robert Marquardt 5. Feb 2007 16:44

Re: RTTI published/Aufzählung
 
Gibt es einen Compilerfehler oder was? Wenn nicht dann bitte die Klasse posten, damit wir pruefen koennen ob da nicht das Problem ist.

Gruber_Hans_12345 5. Feb 2007 16:49

Re: RTTI published/Aufzählung
 
nein, es gibt keinen compilerfehler.

Es sieht so aus, als ob, man Aufzählungen nur dann in published variablen verwenden kann, wenn die lückenlos sind, sobald eine lücke vorkommt, dann wird die variable die diesen typ verwendet nicht mehr published gestellt.

dh. sobald eine lücke vorkommt, kann man noch ganz normal compilieren, aber alle befehel für die RTTI kennen diese variable dann nicht mehr.

[edit]also, wenn es eine lösung gibt, dann müßte es eine compiler direktive dafür sein, damit der den Typ trotzdem in die RTTI aufnimmt, auch mit lücken.

Robert Marquardt 5. Feb 2007 17:12

Re: RTTI published/Aufzählung
 
Ah, du erwartest das die Namen der Elemente im RTTI sind. Das duerfte eine Limitation von Delphi sein. Solche Aufzaehlungen mit Luecken haben naemlich anonyme Mitglieder. Eben diese Luecken.
Das muss man wohl hinnehmen. Das grundlegende Problem ist halt das die C Aufzaehlungen nicht so abstrakt sind wie die von Pascal. Die Aufzaehlungen mit Werten fuer die Elemente sind daher eine gewisse Vergewaltigung des Pascal-Standards.

Gruber_Hans_12345 5. Feb 2007 17:36

Re: RTTI published/Aufzählung
 
Zitat:

Zitat von Robert Marquardt
Ah, du erwartest das die Namen der Elemente im RTTI sind. Das duerfte eine Limitation von Delphi sein. Solche Aufzaehlungen mit Luecken haben naemlich anonyme Mitglieder. Eben diese Luecken.
Das muss man wohl hinnehmen. Das grundlegende Problem ist halt das die C Aufzaehlungen nicht so abstrakt sind wie die von Pascal. Die Aufzaehlungen mit Werten fuer die Elemente sind daher eine gewisse Vergewaltigung des Pascal-Standards.

ja, und gleichzeitig ist natürlich das ganze property aus dem RTTI verbannt.
dh. ich bekomme mit folgendem code das property nicht mehr ...

Delphi-Quellcode:
  Count := GetTypeData(Instance.ClassInfo)^.PropCount;
GetMem(PropList, Count * SizeOf(Pointer));
GetPropInfos(Instance.ClassInfo, PropList);
ich vermute die einzige möglichkeit wird nun nur noch sein, das ich nen eigenen property editor für das ganze schreibe *grml*


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