Inheritance of enumeration types does not work the same as for classes, because the code makes assumptions about enums, which it will never do for the class. For example, given your initial enumeration ( TSpecialKind ), a third-party component probably includes the following code:
var Something: TSpecialKind; [...] case Something of skAlpha: ; skBeta: ; skGamma: ; end;
Even if you can use something that is not part of this enumeration for the TSpecialKind type, the result of the above code will be undefined (and, of course, not very good!)
Enumerations can be used in a different way, and if a third-party component uses it only this way, then you can do some kind of โmagicโ, but I do not recommend it. If the original TSpecialKind used only through the TSpecialKinds type, then it is used only like this:
if skBeta in VarOfTypeSpecialKinds then begin ... end;
(continued), then you can introduce a new type that lists all the original values โโin the same order, with the same value. If after that SizeOf(TSpecialKind) is equal to SizeOf(TNewType) , you can apply the new set value to the old value, and the old code will work the same. But frankly, this is a hack, in many conditions, for it to work correctly, too fragile. A better solution would be to use a new type of enumeration that was used only in your ceiling component:
type TExtraSpecialKind = (skDelta, skEpsilon); TExtraSpecialKinds = set of TExtraSpecialKind;
This set is likely to be published in another property; The solution is clean, goes well with the descendant code, and can also be used cleanly. Example:
if (skAlpha in SpecialKind) or (skDelta in ExtraSpecialKind) then begin // Do extra-sepcial mixed stuff here. end;