2010-09-06 27 views

Répondre

2

Ceci est légal selon ce article. Je rappelle que dans les premières versions de Delphi, les valeurs fournies n'étaient pas supportées.

Il peut être utile de fournir l'erreur de compilation que vous avez reçue. Aussi, quelle version de Delphi utilisez-vous?

+0

Cela devrait en effet être légal, voir aussi: http://docwiki.embarcadero.com/RADStudio/2010/en/Simple_Types#Enumerated_Types_with_Explicitly_Assigned_Ordinality – Otherside

+0

merci, je suis en utilisant D5. Maintenant, je vois ce qu'il ne supporte pas cette fonctionnalité ... wah ... – SomeOne

2

Si vous avez une ancienne version de Delphi (< = D5 IIRC), vous ne pouvez pas le faire. Peut-être que vous pouvez remplacer l'énumération par des constantes? Quelque chose comme

const 
    meVal1 = 1; 
    meVal2 = 3; 

type 
    TMyEnum = Byte; // or Integer or ... - depends on your needs. 

Malheureusement, le compilateur ne peut pas faire autant de contrôle d'erreur pour vous avec cela comme avec un type ENUM.

2

Comme une extension assez laide à la réponse par Ulrich, vous pouvez faire quelque chose comme ce qui suit:

type 
    TMyEnum = (meVal1, meVal2); 

const 
    MY_ENUM_VALS: array[TMyENum] of integer = (1, 3); 

et les accès comme

if (aVal = MY_ENUM_VALS[meVal2]) then... 

Pas assez, je vous accorde, mais au moins De cette façon, vous obtenez un peu plus d'erreurs de compilation pour les versions antérieures de Delphi.

4

Dans Delphis anciens, vous pouvez faire

type 
    MyEnum = (meUnused1, meVal1, meUnused2, meVal2);