@Mikkey: Der Delphi-Compiler bemängelt auch (an vielen Stellen) derartige Werte, welche sich außerhalb der Definition befinden,
allerdings "warnt" er da nur und läßt es dennoch zu und ich weiß jetzt nicht, in wie weit das beim ELSE zutrifft.
Hab das z.B. ausgenutzt, um eine Fremdkomponente um ein paar States zu erweitern.
Delphi-Quellcode:
const
miImageMove = Succ(High(TIEMouseInteractVtItems));
miImageZoom = Succ(miImageMove);
TIEMouseInteractVtItems ist ein Enum, welcher den Zustand der Input-Verarbeitung angibt
und bei dem hab ich zwei eigene Zustände angehängt, welche ich dann selber behandle.
(wobei ich mir diese Warnungen ausgeblendet hab >
{$WARNINGS OFF}
)
Enums und Sets besitzen leider keine Vererbung.
Und im Speicher sind nunmal auch die anderen Werte möglich.
Delphi-Quellcode:
type
TMyEnum = (Anfang = 1, Mitte = 3, Ende = 5);
TMySet = set of TMyEnum;
var
MyEnum: TMyEnum;
MySet: TMySet;
MySet := [TMyEnum.Anfang..TMyEnum.Ende]; // [Anfang..Ende];
for MyEnum in MySet do
case MyEnum of
Anfang: ShowMessage('Anfang');
Mitte: ShowMessage('Mitte');
Ende: ShowMessage('Ende');
else ShowMessage(IntToStr(Ord(MyEnum)));
end;
Delphi-Quellcode:
MySet := [TMyEnum.Anfang..TMyEnum.Ende]; // [Anfang..Ende];
Exclude(MySet, TMyEnum.Mitte);
if TMyEnum.Anfang in MyEnum then ; // hier mal mit dem Debugger nachsehn, was der als Inhalt für MyEnum angibt