Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Enum da CustomAttribute erişimi hakkında
#1
Herkese merhaba, 

Arkadaşlar enum indexi üzerinden customAttribute e ulaşmak istiyorum fakat ne denediysem beceremedim. GetAttributes geriye değer döndürmüyor.

örnek olarak


type
 TEnumAttribute = class (TCustomAttribute)
  private
    FCaption : string;
  public
    constructor Create (const Caption : string);
    property Caption : string read FCaption write FCaption;
end;

 [TEnumAttribute('BİR')]
 [TEnumAttribute('İKİ')]
 [TEnumAttribute('ÜÇ')]
//[TEnumAttribute('bir'), TEnumAttribute('iki'), TEnumAttribute('üç')] -- bunu da denedim
 TMyEnums = (meBir, meIki, meUc);


 Sorunumu Array ile çözebiliyorum fakat RTTI kullanarak da yapmak istememe rağmen çözüme ulaşamadım. 
Herkese teşekkürler.
Cevapla
#2
https://stackoverflow.com/questions/2134...umerations
YouTube Delphi Tips
"Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır" Peyami Safa
WWW
Cevapla
#3
@uparlayan bey'in paylaştığı linkte daha iyi bir örneklem bulunuyor. 


Yeni bir attribute tipi oluşturun


TEnumAttribute = class (TCustomAttribute)
 private 
   FCaption : string;
 public
   constructor Create (const Caption : string);
   property Caption : string read FCaption write FCaption;
end;


Daha sonra kendi enum değerlerinize bunu ekleyin

[TEnumAttribute ('BİR')]
[TEnumAttribute ('İKİ')]
[TEnumAttribute ('ÜÇ')]
TMyEnums = (meBir,meIki,meUc);


Şimdi de enum değerinin ordinal karşılığı ile attribute'e erişin

RttiType := RttiContext.FindType ('EnumUnit.TMyEnums');
RttiAttributes := Rttitype.GetAttributes;
Test := TEnumAttributes(RttiAttributes[index]).Caption;
Cevapla
#4
(24-04-2019, Saat: 15:54)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı: @uparlayan bey'in paylaştığı linkte daha iyi bir örneklem bulunuyor. 


Yeni bir attribute tipi oluşturun


TEnumAttribute = class (TCustomAttribute)
 private 
   FCaption : string;
 public
   constructor Create (const Caption : string);
   property Caption : string read FCaption write FCaption;
end;


Daha sonra kendi enum değerlerinize bunu ekleyin

[TEnumAttribute ('BİR')]
[TEnumAttribute ('İKİ')]
[TEnumAttribute ('ÜÇ')]
TMyEnums = (meBir,meIki,meUc);


Şimdi de enum değerinin ordinal karşılığı ile attribute'e erişin

RttiType := RttiContext.FindType ('EnumUnit.TMyEnums');
RttiAttributes := Rttitype.GetAttributes;
Test := TEnumAttributes(RttiAttributes[index]).Caption;

Cevaplar için teşekkür ederim. Bunu daha önce denedim. 10.3 update 1 de Rttitype.GetAttributes satırında array boş dönüyor. Başka bir sürümde değer dönüyor mu bilmiyorum.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  or komutu hakkinda sadikacar60 1 114 12-04-2024, Saat: 17:17
Son Yorum: sso
  Office programları olmayan PC'den Access database erişimi. enigma 1 134 04-03-2024, Saat: 13:47
Son Yorum: gbg
  AES Şifreleme Hakkında tmrksmt 18 1.480 14-02-2024, Saat: 10:42
Son Yorum: tmrksmt
  TDictionary kullanımım hakkında yhackup 3 451 09-02-2024, Saat: 15:58
Son Yorum: SimaWB
  TfrxReport Rapor dizaynı hakkında yhackup 2 282 24-01-2024, Saat: 11:35
Son Yorum: yhackup



Konuyu Okuyanlar: 1 Ziyaretçi