Jupp, IN bringt bei einem ENUM nichts, da diese Variable wie ein Integer (alle ordinalen Typen) eh nur
einen Wert haben kann. (dafür ist das = da)
Bei einem SET (je Wert ein Bit im Typen) oder Listen, da kann man schön auch mit IN arbeiten. (mit = dort ALLE Bits gleichzeitig vergleichen)
In deinem Fall brauchst eher eine Konstante, wo du mit IN nachsehn kannst.
Sobald auch nur ein Wert im SET mit einem Wert vordefiniert ist (=), werden die enthaltenen ENUMS nicht mehr in der
RTTI gespeichert.
Und man kann nicht nachsehen, ob es einen Wert darin gibt. (nur das High kann man noch benutzten)
z.B.
Delphi-Quellcode:
type
//TMyField = (of0, of1, of2, of3, ofBelegnummer, of5, ofBelegdatum, ofKonto, ofKontoName, ofBank, ofZahldatum); // hier könnte man auch via RTTI/TypInfo im Typ nachsehn, anstatt in einer Konstante/Variable
TMyField = (ofBelegnummer=4, ofBelegdatum=6, ofKonto, ofKontoName, ofBank, ofZahldatum);
TMyFields =
set of TMyField;
const
MyOrderFields: TMyFields = [ofBelegnummer, ofBelegdatum, ofKonto, ofKontoName, ofBank, ofZahldatum];
if TOrderField(ACol)
in MyOrderFields
then
oder
Delphi-Quellcode:
const
ofBelegnummer = 4;
ofBelegdatum = 6;
ofKonto = 7;
ofKontoName = 8;
ofBank = 9;
ofZahldatum = 10;
type
TMyFields = set of Byte; // oder auch nur = set of 0..10;
const
MyOrderFields: TMyFields = [ofBelegnummer, ofBelegdatum, ofKonto, ofKontoName, ofBank, ofZahldatum];
if ACol in MyOrderFields then
oder
...
Man kann sich auch einen Helper schreiben, welcher ... naja.
Ich hatte mir mal vor Jahren das
TObject.IsClass etwas erweitert.
Delphi-Quellcode:
type
TObjectHelper = class helper for TObject
public
function ClassIs(const ClassName: string): Boolean; overload; // entspricht dem IS ... prüft, ob die Klasse von der "namentlich" angegebenen Klasse abgeleitet wurde (TObject.IsClassName prüft nur, ob es genau die Klasse ist und beachtet auch kein NIL)
function ClassIs(const ClassNames: array of string): Boolean; overload;
function ClassIs(const ClassType: TClass): Boolean; overload;
function ClassIs(const ClassTypes: array of TClass): Boolean; overload;
function NameIs(const Objects: array of TObject): Boolean; overload; // Self in Objects
function NameIs(const Names: array of string): Boolean; overload; // TComponent(Self).Name in Names
// und noch bissl mehr Nützliches
end;
// ObjektZeiger vergleichen
if Column.NameIs(ColBelegnummer, ColBelegdatum, ColKonto, ColKontoName, ColBank, ColZahldatum) then
// Column.Name prüfen (case-insentitive)
if Column.NameIs('ColBelegnummer', 'ColBelegdatum', 'ColKonto', 'ColKontoName', 'ColBank', 'ColZahldatum') then
Aber denkbar wäre es inzwischen auch gut als Class Operator für IN
if Column in [ColBelegnummer, ColBelegdatum, ColKonto, ColKontoName, ColBank, ColZahldatum] then