![]() |
TypeInfo ermitteln
Hi,
ich greife auf ein Enum-Property zu und weiß nicht, wie ich die zugehörige TypeInfo ermitteln kann...
Delphi-Quellcode:
Kann mir wer helfen?
if PropIsType(DCustom, DataName, tkEnumeration) then // Property ist Enum
begin I := GetEnumValue(TypeInfo(???), GetPropValue(DCustom, DataName)); // Wert ist bekannt, aber nicht der Typ Stahli |
Re: TypeInfo ermitteln
Nimm doch "TypeInfo"!
|
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:
Nun suche ich eine generelle Möglichkeit für ein Property irgendeines Aufzählungstyps.
W.WriteString(GetEnumName(TypeInfo(TStateType), Ord(StateType)));
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) |
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. |
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.
|
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 |
Re: TypeInfo ermitteln
Mit dem letzten Versuch hast du es doch schon fast: Du hast nur noch ein P zu viel, also einmal dereferenzieren.
|
Re: TypeInfo ermitteln
Zeiger sollten verboten werden! :roll:
Wie mach ich´s richtig? |
Re: TypeInfo ermitteln
Wie gesagt, einmal dereferenzieren, also ein Dach ^ hinter .PropType
|
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.... |
Re: TypeInfo ermitteln
Vielen Dank Euch beiden :-))
Delphi-Quellcode:
So funktioniert das wunderbar! (Vor Zeigerfunktionen habe ich mich bisher immer gedrückt)
I := GetEnumValue(GetPropInfo(DCustom, DataName).PropType^, GetPropValue(DCustom, DataName));
Ich weise einer eigenen Komponente (TRadioGroupDATA) eine Datenkomponente und einen Propertynamen zu. Die Komponente setzt dann ItemIndex selbständig und zwar abhängig davon, von welchem Typ das Property ist. Handelt es sich um irgendeinen Aufzählungstyp, wird der entsprechende Ordinalwert ermittelt und standardmäßig ItemIndex zugewiesen. Es handelst sich also um eine "datensensitive" Komponente, die aber nicht an Datenbanken angebunden wird sondern an Datenkomponenten. Stahli |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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 by Thomas Breitkreuz