Nabend!
Ich hantiere gerade mit Attributes und Variants rum und hänge fest. Hier mein Attribut:
Delphi-Quellcode:
type
MyDefaultAttr = class(TCustomAttribute)
private
FDefaultValue: Variant;
public
constructor Create(DefaultValue: Variant); overload;
property DefaultValue: Variant read FDefaultValue;
end;
constructor MyDefaultAttr.Create(DefaultValue: Variant);
begin
inherited Create;
FDefaultValue := DefaultValue;
end;
Und hier wie ich sie benutze:
Delphi-Quellcode:
uses Rtti, TypInfo;
type
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
private
FTestProp: boolean;
public
[MyDefaultAttr]
// Funktioniert
property FirstTestProp: boolean
read FTestProp
write FTestProp;
[MyDefaultAttr(true)]
// Fehler
property SecondTestProp: boolean
read FTestProp
write FTestProp;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Context: TRttiContext;
TypeInfo: TRttiType;
Prop: TRttiProperty;
begin
Context := TRttiContext.Create;
try
TypeInfo := Context.GetType(Self.ClassType);
for Prop
in TypeInfo.GetProperties
do
Prop.GetAttributes;
// Exception
finally
Context.Free;
end;
end;
Mit
[MyDefaultAttr]
gehts, sobald ich aber auf das Attribut eines Properties zugreifen möchte, das mit einem DefaultValue erstellt wurde
[MyDefaultAttr(true)]
, bekomm ich eine
Exception:
First chance exception at $7524C41F. Exception class EVariantBadVarTypeError with message 'Invalid variant type'.
Hat da jemand eine Idee?
Beste Grüße
Björn