unit uutlEnumHelper; (* Package: Utils Prefix: utl - UTiLs Beschreibung: diese Unit stellt einen Mechanismus zur Verfügung, ohne viel Aufwand, Helper Klassen für Enums zu implementieren Verwendung: {$MACRO ON} interface {$define __ENUM_INTERFACE} {$define __ENUM_HELPER:=TSomeEnumH}{$define __ENUM_TYPE:=TSomeEnum}{$define __ENUM_LENGTH:=4} {$I uutlEnumHelper.inc}( E: (enVal1, enVal2, enVal3, enVal4); N: 'enVal1,enVal2,enVal3,enVal4'; ); end; //... mehr davon {$undef __ENUM_INTERFACE} implementation {$define __ENUM_IMPLEMENTATION} {$define __ENUM_HELPER:=TSomeEnumH}{$define __ENUM_TYPE:=TSomeEnum}{$I uutlEnumHelper.inc} {$undef __ENUM_IMPLEMENTATION} *) interface uses SysUtils, StrUtils; type EConvertErrorAlias = SysUtils.EConvertError; function LookupString(const aStr, aTable: String; out found: integer): boolean; function PickString(const aTable: String; const aIndex: integer): string; function LookupVal(const aVal: Pointer; const aPtr: Pointer; const aStep, aCount: PtrInt; out found: integer): boolean; implementation function LookupString(const aStr, aTable: String; out found: integer): boolean; var tbl: string; i,p,k: integer; t: string; begin Result:= false; tbl:= aTable + ','; t:= ''; k:= 0; i:= 1; while i < Length(tbl) do begin p:= PosEx(',',tbl,i); t:= Trim(Copy(tbl, i, p-i)); i:= p+1; if CompareText(t, aStr)=0 then begin found:= k; Result:= true; exit; end else inc(k); end; end; function PickString(const aTable: String; const aIndex: integer): string; var tbl: String; k,i,p: integer; begin result:= ''; tbl:= aTable + ','; i:= 1; k:= aIndex; while (k>0) and (i>0) do begin i:= PosEx(',',tbl, i) + 1; dec(k); end; p:= PosEx(',',tbl, i); if p<=0 then Result:= '' else Result:= Trim(Copy(tbl, i, p-i)); end; function LookupVal(const aVal: Pointer; const aPtr: Pointer; const aStep, aCount: PtrInt; out found: integer): boolean; var pt: Pointer; i: integer; begin Result:= false; pt:= aPtr; for i:= 0 to aCount-1 do begin if CompareMem(pt, aVal, aStep) then begin Result:= true; found:= i; exit; end; inc(pt, aStep); end; end; end.