SCOPEDENUMS kann/muß man bei der Typ-Deklaration angeben. Nachträglich wird es nicht mehr geändert.
Aber ja, beim FMX wird das sehr oft benutzt und es wurde auch schon mehrmals geändert. (in der nächsten Delphi-Version)
PS: Ich finde es auch krank, wenn man Scope mit Prefix mischt, was im FMX oft vorkommt/vorkam,
und das hier ist einer der Fälle.
Ja, die
RTTI ist für sowas einfach zu praktisch ... würde das auch empfehlen.
Da TWindowState beim Parameter gefunden wurde, könnte man denken die nötige
Unit ist vorhanden,
aber es gibt einige Typen mit Weiterleitungen, z.B. wenn sie verschoben wurden, aber leider wird da oft nur der Typ weitergeleitet, aber bei Enums nicht die Werte, was echt schwachsinnig ist (ohne ScopedEnums), da man dann dennoch die andere
Unit einbinden muß, womit die Weiterleitung des Typs fast nutzlos ist (außer man nutzt den Scope/Namespace).
Aber hier hat man es z.B. in der
Vcl.Forms mal (fast) richtig gemacht,
aber da es hier eben die vollständige Weiterleitung gibt (Grund sind alte
VCL-Quellcodes wo es früher noch ohne Scope war), kann man über die
Vcl.Forms das wsMaximized ohne Scope benutzen, während es über System.UITypes nur mit Scope zu nutzen ist.
Delphi-Quellcode:
// System.UITypes, war aber früher in der Forms.pas und SCOPEDENUMS war noch nicht erfunden
{$SCOPEDENUMS ON}
type
TWindowState = (wsNormal, wsMinimized, wsMaximized);
// Vcl.Forms
const
wsNormal = System.UITypes.TWindowState.wsNormal;
wsMinimized = System.UITypes.TWindowState.wsMinimized;
wsMaximized = System.UITypes.TWindowState.wsMaximized;
type
TWindowState = System.UITypes.TWindowState;