![]() |
wsNormal, wsMinimized, wsMaximized nicht gefunden ?
VCL vs. FMX : ich habe eine Funktion die zwar den Datentyp TWindowState aus der unit System.UITypes kennt,
aber bei der Überprüfung eines Types behauptet wsMaximized sei nicht definiert :-( , unter VCL kompiliert der Code ohne Probleme ......
Delphi-Quellcode:
function WindowState2String (value: TWindowState): String;
begin if value = wsNormal then Result := 'wsNormal';
Delphi-Quellcode:
[dcc64 Error] OLib.WIN.pas(1091): E2003 Undeclared identifier: 'wsMaximized'
|
AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?
Ist bei meinem 10.4 inkl. Patch1+2 auch so.
Wenn du echt - wie in deinem Beispiel - am WindowState als string interessiert bist... das hier funktioniert in FMX wie auch VCL:
Delphi-Quellcode:
( Es gibt sicher im Verlauf des Tages eine einfache Erklärung wieso der von dir erwähnte Fehler auftritt. )
uses System.TypInfo;
function statusstr( winstate : TWindowState ) : string; begin Result := GetEnumName(typeinfo(TWindowState),ord(winstate)); end; procedure TForm25.FormCreate(Sender: TObject); begin label1.Text := statusstr( windowstate ); end; |
AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?
Kann es hier grade nicht ausprobieren. Aber ist es vielleicht als SCOPEDENUMS definiert?
Setz doch mal den Typ vorne an.
Delphi-Quellcode:
function WindowState2String (value: TWindowState): String;
begin if value = TWindowState.wsNormal then Result := 'wsNormal'; |
AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?
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. :freak: 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; |
AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?
Danke
der RTTI Ansatz als auch TWindowState.wsMaximized sind 2 funktionierende Lösungen , wieder alles gut :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz