AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung wsNormal, wsMinimized, wsMaximized nicht gefunden ?

wsNormal, wsMinimized, wsMaximized nicht gefunden ?

Ein Thema von bernhard_LA · begonnen am 18. Jul 2020 · letzter Beitrag vom 19. Jul 2020
Antwort Antwort
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.125 Beiträge
 
Delphi 11 Alexandria
 
#1

wsNormal, wsMinimized, wsMaximized nicht gefunden ?

  Alt 18. Jul 2020, 22:45
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';


[dcc64 Error] OLib.WIN.pas(1091): E2003 Undeclared identifier: 'wsMaximized'
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
747 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?

  Alt 19. Jul 2020, 08:48
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:
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;
( Es gibt sicher im Verlauf des Tages eine einfache Erklärung wieso der von dir erwähnte Fehler auftritt. )
Michael Gasser
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.272 Beiträge
 
Delphi 12 Athens
 
#3

AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?

  Alt 19. Jul 2020, 09:24
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';
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.310 Beiträge
 
Delphi 12 Athens
 
#4

AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?

  Alt 19. Jul 2020, 11:56
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (19. Jul 2020 um 12:23 Uhr)
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.125 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: wsNormal, wsMinimized, wsMaximized nicht gefunden ?

  Alt 19. Jul 2020, 21:27
Danke

der RTTI Ansatz als auch TWindowState.wsMaximized sind 2 funktionierende Lösungen , wieder alles gut
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz