Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TypeInfo ermitteln (https://www.delphipraxis.net/105691-typeinfo-ermitteln.html)

stahli 27. Dez 2007 17:34


TypeInfo ermitteln
 
Hi,

ich greife auf ein Enum-Property zu und weiß nicht, wie ich die zugehörige TypeInfo ermitteln kann...

Delphi-Quellcode:
    if PropIsType(DCustom, DataName, tkEnumeration) then //  Property ist Enum
    begin
      I := GetEnumValue(TypeInfo(???), GetPropValue(DCustom, DataName)); //  Wert ist bekannt, aber nicht der Typ
Kann mir wer helfen?

Stahli

sirius 27. Dez 2007 17:36

Re: TypeInfo ermitteln
 
Nimm doch "TypeInfo"!

stahli 27. Dez 2007 17:42

Re: TypeInfo ermitteln
 
Ja, war Schreibfehler von mir :oops:
Ich meinte TypeInfo(???).
Aber von was?


edit...
Ich will das mal konkretisieren:

In einer Unit, die Funktionen für den speziellen Aufzaählungstyp enthält, kann ich das so lösen:
Delphi-Quellcode:
  W.WriteString(GetEnumName(TypeInfo(TStateType), Ord(StateType)));
Nun suche ich eine generelle Möglichkeit für ein Property irgendeines Aufzählungstyps.
Ich habe Zugriff auf das Property und den String des Aufzählungswertes.
Ich finde aber keine Möglichkeit, den Aufzählungstyp zu ermitteln (hier: TStateType)

sirius 27. Dez 2007 18:56

Re: TypeInfo ermitteln
 
Das geht so nicht (und falls doch, dann würde mich das auch dringend interessieren :mrgreen: ).
TypeInfo ist keine Funktion o.ä., sondern wird während des Compilierens einfach durch eine Adresse ersetzt.
Du musst dir diese Funktion eher selber simulieren.

Apollonius 27. Dez 2007 19:05

Re: TypeInfo ermitteln
 
Sehe ich das richtig, dass du eine Instanz und den Property-Namen hast? Nimm doch GetPropInfo und lies aus dem Rückgabewert die Type-Information aus.

stahli 27. Dez 2007 19:16

Re: TypeInfo ermitteln
 
meine Versuche führen zu folgenen Fehlern:

I := GetEnumValue(TypeInfo(GetPropInfo(DCustom, DataName)), GetPropValue(DCustom, DataName));
-> Standardfunktion TYPEINFO erwartet einen Typbezeichner

I := GetEnumValue(TypeInfo(GetPropInfo(DCustom, DataName).PropType), GetPropValue(DCustom, DataName));
-> Standardfunktion TYPEINFO erwartet einen Typbezeichner

I := GetEnumValue(GetPropInfo(DCustom, DataName).PropType, GetPropValue(DCustom, DataName));
-> Inkompatible Typen: "PTypeInfo" und "PPTypeInfo"

Ich weiß eben nicht, wie ich in meinem Fall den Typ "TStateType" herausfinde :-(

Stahli

Apollonius 27. Dez 2007 19:19

Re: TypeInfo ermitteln
 
Mit dem letzten Versuch hast du es doch schon fast: Du hast nur noch ein P zu viel, also einmal dereferenzieren.

stahli 27. Dez 2007 19:24

Re: TypeInfo ermitteln
 
Zeiger sollten verboten werden! :roll:
Wie mach ich´s richtig?

Apollonius 27. Dez 2007 19:25

Re: TypeInfo ermitteln
 
Wie gesagt, einmal dereferenzieren, also ein Dach ^ hinter .PropType

sirius 27. Dez 2007 19:28

Re: TypeInfo ermitteln
 
Also TypeInfo geht wie gesagt nicht. Da TypeInfo direkt einen Typbezeichner erwartet und nix anderes, keine Variablen und auch keine Ergebnisse von Funktionen.
Was willst du genau erreichen? Also was ist Dcustom....


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz