Einzelnen Beitrag anzeigen

Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#6

AW: Enum-Typ als Parameter übergeben und mit einer Schleife durchgehen

  Alt 23. Aug 2017, 23:41
Dann schau dir mal TRttiEnumerationType an. GetMinValue und GetMaxValue sind zwar leider private , aber folgende Methoden könnten dir evtl. schon reichen:
Delphi-Quellcode:
function GetNames: TArray<string>;
class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
class function GetValue<T{: enum}>(const AName: string): T; static;
Ansonsten hätte ich hier noch eine Möglichkeit explizit an Min und Max zu gelangen (Auszug aus einem Code, der den generischen Enum Typ in einen Ordinalwert konvertiert und dabei zur Sicherheit einige Assertions aufgrund der RTTI Infos ausführt):
Delphi-Quellcode:
var
  TypeInfo: PTypeInfo;
  TypeData: PTypeData;
  V: Integer;
begin
  Assert(SizeOf(V) >= SizeOf(T));
  TypeInfo := System.TypeInfo(T);
  Assert(Assigned(TypeInfo) and (TypeInfo^.Kind = tkEnumeration));
  TypeData := System.TypInfo.GetTypeData(TypeInfo);
  V := 0;
  Move(Value, V, SizeOf(T));
  Assert((V >= TypeData^.MinValue) and (V <= TypeData^.MaxValue));
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (23. Aug 2017 um 23:45 Uhr)
  Mit Zitat antworten Zitat